add Antiquated Perl slides as POD, delete takahashi code
[catagits/Web-Simple.git] / lib / Web / Simple / AntiquatedPerl.pod
diff --git a/lib/Web/Simple/AntiquatedPerl.pod b/lib/Web/Simple/AntiquatedPerl.pod
new file mode 100644 (file)
index 0000000..5045129
--- /dev/null
@@ -0,0 +1,446 @@
+=head1 NAME
+
+Web::Simple::AntiquatedPerl - the slides from the talk
+
+=head1 WHAT?
+
+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.
+
+=head1 SLIDES
+
+  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 |= 0x120000;
+    $^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
+
+=head1 AUTHOR
+
+Matt S. Trout <mst@shadowcat.co.uk>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2010 Matt S. Trout <mst@shadowcat.co.uk>
+
+=head1 LICENSE
+
+This text may be distributed under the GPL (v2 or later), the Artistic License
+(v1 or later), the Creative Commons Attribution (CC BY v3 or later), the
+Mozilla Public License (v1 or later, in honour of the license of the
+takahashi.xul system I used to write these slides originally), or the
+WTFPL (see <http://sam.zoy.org/wtfpl/COPYING>).
+
+If you'd like me to add another license, please ask.
+
+=cut