tweak Antiquated Perl copyright to 'same as perl'.
[catagits/Web-Simple.git] / lib / Web / Simple / AntiquatedPerl.pod
CommitLineData
58fd1f7f 1=head1 NAME
2
3Web::Simple::AntiquatedPerl - the slides from the talk
4
5=head1 WHAT?
6
7Web::Simple was originally introduced in a talk at the Italian Perl Workshop,
8entitled Antiquated Perl.
9
10The video is available on the Shadowcat site: <http://www.shadowcat.co.uk/archive/conference-video/ipw-2009/antiquated>
11
12If you don't particularly want to watch me confusing a bunch of Italian perl
13mongers, the slides are reproduced below.
14
15=head1 SLIDES
16
17 Antiquated
18 Perl
19 ----
20 Modern
21 Perl?
22 ----
23 Post
24 Modern
25 Perl
26 ----
27 Enlightened
28 Perl
29 ----
30 everybody
31 knows
32 ----
33 Catalyst
34 Moose
35 DBIx::Class
36 ----
37 Modern
38 Perl?
39 ----
40 perl5
41 v10
42 ----
43 given ($x) {
44 when (3) {
45 ...
46 ----
47 ~~
48 ----
49 what's the
50 opposite?
51 ----
52 Old
53 Perl?
54 ----
55 if it
56 works
57 ----
58 Legacy
59 Perl?
60 ----
61 not
62 interesting
63 ----
64 Stupid
65 Perl
66 ----
67 *$&^*(^
68 FormMail.PL
69 ----
70 Antiquated
71 Perl
72 ----
73 Antique
74 ----
75 Old *and*
76 beautiful
77 ----
78 Simple
79 Elegant
80 ----
81 $|++
82 ----
83 use IO::Handle;
84 STDOUT->autoflush(1);
85 ----
86 it's core.
87 it's fine.
88 ----
89 but why
90 think?
91 ----
92 select((select(FOO),$|++)[0])
93 ----
94 (select(FOO),$|++)
95 ->
96 ($old_selected_fh,$|)
97 ----
98 (select(FOO),$|++)[0]
99 ->
100 $old_select_fh
101 ----
102 select((select(FOO),$|++)[0])
103 ->
104 use IO::Handle;
105 FOO->autoflush(1)
106 ----
107 ~~
108 ----
109 ~~@x
110 ----
111 ~(~(@x))
112 ----
113 bitwise
114 negation
115 ----
116 so ...
117 ----
118 ~@x
119 ->
120 ~(scalar @x)
121 ----
122 ~~$number
123 ->
124 $number
125 ----
126 ~~@x
127 ->
128 scalar @x
129 ----
130 perl -MMoose -e'print ~~keys %INC'
131 84
132 ----
133 overload::constant
134 ----
135 lets you
136 affect
137 parsing
138 ----
139 numbers
140 strings
141 ----
142 q qq qr
143 t s qw
144 ----
145 i18n.pm
146 ----
147 ~~"$foo bar"
148 loc("_[0] bar", $foo)
149 ----
150 for
151 ----
152 for ($foo) {
153 /bar/ and ...
154 ----
155 for ($foo) {
156 /bar/ and return do {
157 <code here>
158 }
159 ----
160 /foo/gc
161 ----
162 /\Gbar/gc
163 ----
164 sub parse {
165 my ($self, $str) = @_;
166 for ($str) {
167 /match1/gc and return
168 $self->_subparse_1($_)
169 ----
170 sub _subparse_1 {
171 my ($self) = @_;
172 for ($_[1]) {
173 /\Gsubmatch1/gc ...
174 ----
175 prototypes
176 ----
177 sub foo (&) {
178 ----
179 foo {
180 ...
181 };
182 ----
183 prototype \&foo
184 ----
185 typeglobs
186 ----
187 *{"${package}::${name}"}
188 = sub { ... }
189 ----
190 local
191 ----
192 local $_
193 ----
194 local *Carp::croak
195 = \&Carp::confess;
196 ----
197 do {
198 local (@ARGV, $/) = $file;
199 <>
200 }
201 ----
202 strict
203 and
204 warnings
205 ----
206 strict->import
207 ----
208 affects
209 compilation
210 scope
211 ----
212 sub strict_and_warnings::import {
213 strict->import;
214 warnings->import;
215 }
216 ----
217 use strict_and_warnings;
218 ----
219 $^H
220 %^H
221 ----
222 $^H |= 0x120000;
223 $^H{'foo'}
224 = bless($foo, 'My::Foo');
225 ----
226 sub My::Foo::DESTROY {
227 ----
228 delete ${$package}{myimport}
229 ----
230 B::Hooks::EndOfScope
231 ----
232 tie
233 ----
234 tie $var, 'Foo';
235 ----
236 sub FETCH
237 sub STORE
238 ----
239 Scalar
240 Array
241 Hash
242 Handle
243 ----
244 now ...
245 ----
246 mst: destruction
247 testing technology
248 since March 1983
249 ----
250 3 days
251 old
252 ----
253 2 weeks
254 early
255 ----
256 incubator
257 ----
258 glass box
259 plastic tray
260 heater
261 ----
262 design
263 flaw
264 ----
265 BANG
266 ----
267 so ...
268 ----
269 interesting
270 fact
271 ----
272 prototypes
273 only warn
274 when parsed
275 ----
276 error when
277 compiled
278 ----
279 so ...
280 ----
281 dispatch [
282 sub (GET + /) { ... },
283 sub (GET + /user/*) { ... }
284 ];
285 ----
286 foreach my $sub (@$dispatch) {
287 my $proto = prototype $sub;
288 $parser->parse($proto);
289 ...
290 ----
291 PARSE: { do {
292 push @match, $self->_parse_spec_section($spec)
293 or $self->_blam("Unable to work out what the next section is");
294 last PARSE if (pos == length);
295 /\G\+/gc or $self->_blam('Spec sections must be separated by +');
296 } until (pos == length) };
297 ----
298 sub _blam {
299 my ($self, $error) = @_;
300 my $hat = (' ' x pos).'^';
301 die "Error parsing dispatch specification: ${error}\n
302 ${_}
303 ${hat} here\n";
304 }
305 ----
306 Error parsing ...
307 GET+/foo
308 ^ here
309 ----
310 sub (GET + /user/*) {
311 my ($self, $user) = @_;
312 ----
313 I hate
314 fetching
315 $self
316 ----
317 *{"${app}::self"}
318 = \${"${app}::self"};
319 ----
320 use vars
321 ----
322 sub _run_with_self {
323 my ($self, $run, @args) = @_;
324 my $class = ref($self);
325 no strict 'refs';
326 local *{"${class}::self"} = \$self;
327 $self->$run(@args);
328 }
329 ----
330 HTML
331 output
332 ----
333 templates
334 ----
335 HTML is
336 NOT TEXT
337 ----
338 <div>,
339 $text,
340 </div>;
341 ----
342 <div>
343 ----
344 <$fh>
345 ----
346 tie *{"${app}::${name}"},
347 'XML::Tags::TIEHANDLE',
348 "<${name}>";
349 ----
350 sub TIEHANDLE { my $str = $_[1]; bless \$str, $_[0] }
351 sub READLINE { ${$_[0]} }
352 ----
353 sub DESTROY {
354 my ($into, @names) = @$_[0];
355 no strict 'refs';
356 delete ${$into}{$_}
357 for @names;
358 }
359 ----
360 </div>
361 ----
362 glob('/div');
363 ----
364 *CORE::GLOBAL::glob
365 = sub { ... };
366 ----
367 delete
368 ${CORE::GLOBAL::}{glob};
369 ----
370 sub foo {
371 use XML::Tags qw(div);
372 <div>, "foo!", </div>;
373 }
374 ----
375 what about
376 interpolation
377 ----
378 my $stuff = 'foo"bar';
379 <a href="$stuff">
380 ----
381 hmm ...
382 ----
383 overload::constant!
384 ----
385 glob('a href="'.$stuff.'"');
386 ----
387 glob(
388 bless(\'a href="', 'MagicTag')
389 .$stuff
390 .bless(\'"', 'MagicTag')
391 )
392 ----
393 use overload
394 '.' => 'concat';
395
396 sub concat {
397 ----
398 hooking
399 it up
400 ----
401 sub (.html) {
402 filter_response {
403 $self->render_html($_[1])
404 }
405 }
406 ----
407 bless(
408 $_[1],
409 'Web::Simple::ResponseFilter'
410 );
411 ----
412 if ($self->_is_response_filter($result)) {
413 return $self->_run_with_self(
414 $result,
415 $self->_run_dispatch_for($new_env, \@disp)
416 );
417 }
418 ----
419 and the result?
420 ----
421 goto &demo;
422 ----
423 questions?
424 ----
425 thank
426 you
427
428=head1 AUTHOR
429
430Matt S. Trout <mst@shadowcat.co.uk>
431
432=head1 COPYRIGHT
433
434Copyright (c) 2010 Matt S. Trout <mst@shadowcat.co.uk>
435
436=head1 LICENSE
437
f2ff31cd 438This text is free documentation under the same license as perl itself.
58fd1f7f 439
440=cut