GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Web::Simple::AntiquatedPerl(3) User Contributed Perl Documentation Web::Simple::AntiquatedPerl(3)

Web::Simple::AntiquatedPerl - the slides from the talk

Web::Simple was originally introduced in a talk at the Italian Perl Workshop, entitled Antiquated Perl.

The video is available on the Shadowcat site: <http://www.shadowcat.co.uk/archive/conference-video/ipw-2009/antiquated>

If you don't particularly want to watch me confusing a bunch of Italian perl mongers, the slides are reproduced below.

  Antiquated
  Perl
  ----
  Modern
  Perl?
  ----
  Post
  Modern
  Perl
  ----
  Enlightened
  Perl
  ----
  everybody
  knows
  ----
  Catalyst
  Moose
  DBIx::Class
  ----
  Modern
  Perl?
  ----
  perl5
  v10
  ----
    given ($x) {
      when (3) {
    ...
  ----
  ~~
  ----
  what's the
  opposite?
  ----
  Old
  Perl?
  ----
  if it 
  works
  ----
  Legacy
  Perl?
  ----
  not
  interesting
  ----
  Stupid
  Perl
  ----
  *$&^*(^
  FormMail.PL
  ----
  Antiquated
  Perl
  ----
  Antique
  ----
  Old *and*
  beautiful
  ----
  Simple
  Elegant
  ----
    $|++
  ----
    use IO::Handle;
    STDOUT->autoflush(1);
  ----
  it's core.
  it's fine.
  ----
  but why
  think?
  ----
    select((select(FOO),$|++)[0])
  ----
    (select(FOO),$|++)
    ->
    ($old_selected_fh,$|)
  ----
    (select(FOO),$|++)[0]
    ->
    $old_select_fh
  ----
    select((select(FOO),$|++)[0])
    ->
    use IO::Handle;
    FOO->autoflush(1)
  ----
  ~~
  ----
    ~~@x
  ----
    ~(~(@x))
  ----
  bitwise
  negation
  ----
  so ...
  ----
    ~@x
    ->
    ~(scalar @x)
  ----
    ~~$number
    ->
    $number
  ----
    ~~@x
    ->
    scalar @x
  ----
    perl -MMoose -e'print ~~keys %INC'
    84
  ----
  overload::constant
  ----
  lets you
  affect
  parsing
  ----
  numbers
  strings
  ----
  q qq qr
  t s qw
  ----
  i18n.pm
  ----
  ~~"$foo bar"
  loc("_[0] bar", $foo)
  ----
  for
  ----
    for ($foo) {
      /bar/ and ...
  ----
    for ($foo) {
      /bar/ and return do {
        <code here>
      }
  ----
    /foo/gc
  ----
    /\Gbar/gc
  ----
    sub parse {
      my ($self, $str) = @_;
      for ($str) {
        /match1/gc and return
          $self->_subparse_1($_)
  ----
    sub _subparse_1 {
      my ($self) = @_;
      for ($_[1]) {
        /\Gsubmatch1/gc ...
  ----
  prototypes
  ----
    sub foo (&) {
  ----
    foo {
      ...
    };
  ----
    prototype \&foo
  ----
  typeglobs
  ----
    *{"${package}::${name}"}
      = sub { ... }
  ---- 
    local
  ----
    local $_
  ----
    local *Carp::croak
      = \&Carp::confess;
  ----
    do {
      local (@ARGV, $/) = $file;
      <>
    }
  ----
  strict
  and
  warnings
  ----
    strict->import
  ----
  affects
  compilation
  scope
  ----
    sub strict_and_warnings::import {
      strict->import;
      warnings->import;
    }
  ----
    use strict_and_warnings;
  ----
  $^H
  %^H
  ----
    $^H |= 0x20000;
    $^H{'foo'}
      = bless($foo, 'My::Foo');
  ----
    sub My::Foo::DESTROY {
  ----
    delete ${$package}{myimport}
  ----
  B::Hooks::EndOfScope
  ----
  tie
  ----
    tie $var, 'Foo';
  ----
    sub FETCH
    sub STORE
  ----
  Scalar
  Array
  Hash
  Handle
  ----
  now ...
  ----
  mst: destruction
  testing technology
  since March 1983
  ----
  3 days
  old
  ----
  2 weeks
  early
  ----
  incubator
  ----
  glass box
  plastic tray
  heater
  ----
  design
  flaw
  ----
  BANG
  ----
  so ...
  ----
  interesting
  fact
  ----
  prototypes
  only warn
  when parsed
  ----
  error when
  compiled
  ----
  so ...
  ----
    dispatch [
      sub (GET + /) { ... },
      sub (GET + /user/*) { ... }
    ];
  ----
    foreach my $sub (@$dispatch) {
      my $proto = prototype $sub;
      $parser->parse($proto);
      ...
  ----
    PARSE: { do {
      push @match, $self->_parse_spec_section($spec)
        or $self->_blam("Unable to work out what the next section is");
      last PARSE if (pos == length);
      /\G\+/gc or $self->_blam('Spec sections must be separated by +');
    } until (pos == length) };
  ----
    sub _blam {
      my ($self, $error) = @_;
      my $hat = (' ' x pos).'^';
      die "Error parsing dispatch specification: ${error}\n
    ${_}
    ${hat} here\n";
    }
  ----
    Error parsing ...
    GET+/foo
       ^ here
  ----
    sub (GET + /user/*) {
     my ($self, $user) = @_;
  ----
  I hate
  fetching
  $self
  ----
    *{"${app}::self"}
      = \${"${app}::self"};
  ----
  use vars
  ----
    sub _run_with_self {
      my ($self, $run, @args) = @_;
      my $class = ref($self);
      no strict 'refs';
      local *{"${class}::self"} = \$self;
      $self->$run(@args);
    }
  ----
  HTML
  output
  ----
  templates
  ----
  HTML is
  NOT TEXT
  ----
    <div>,
      $text,
    </div>;
  ----
  <div>
  ----
  <$fh>
  ----
    tie *{"${app}::${name}"},
      'XML::Tags::TIEHANDLE',
      "<${name}>";
  ----
    sub TIEHANDLE { my $str = $_[1]; bless \$str, $_[0] }
    sub READLINE { ${$_[0]} }
  ----
    sub DESTROY {
      my ($into, @names) = @$_[0];
      no strict 'refs';
      delete ${$into}{$_}
        for @names;
    }
  ----
  </div>
  ----
  glob('/div');
  ----
    *CORE::GLOBAL::glob
      = sub { ... };
  ----
    delete
      ${CORE::GLOBAL::}{glob};
  ----
    sub foo {
      use XML::Tags qw(div);
      <div>, "foo!", </div>;
    }
  ----
  what about
  interpolation
  ----
    my $stuff = 'foo"bar';
    <a href="$stuff">
  ----
  hmm ...
  ----
  overload::constant!
  ----
    glob('a href="'.$stuff.'"');
  ----
    glob(
      bless(\'a href="', 'MagicTag')
      .$stuff
      .bless(\'"', 'MagicTag')
    )
  ----
    use overload
      '.' => 'concat';
  
    sub concat {
  ----
  hooking
  it up
  ----
    sub (.html) {
      filter_response {
        $self->render_html($_[1])
      }
    }
  ----
    bless(
      $_[1],
      'Web::Simple::ResponseFilter'
    );
  ----
    if ($self->_is_response_filter($result)) {
      return $self->_run_with_self(
        $result,
        $self->_run_dispatch_for($new_env, \@disp)
      );
    }
  ----
  and the result?
  ----
   goto &demo;
  ----
  questions?
  ----
  thank
  you

Matt S. Trout <mst@shadowcat.co.uk>

Copyright (c) 2011 Matt S. Trout <mst@shadowcat.co.uk>

This text is free documentation under the same license as perl itself.
2012-05-07 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.