Perl Which perl
弾さんのセッション。
さすがは弾さんってこともあって、超満員でした。
Modern Perl
Perl 4 (PHP) は忘れましょう。さすがにまだ使っている人はいないですね。
Perl 5.6 は Encode サポートがないのであまりオススメできない。
それでもメンテナンスはまだされている。
ただし Jcode.pm は動くよ。
Perl 5.8 以降は Encode.pm もあり、サポートがまとも。
いわゆる Moose などの Modern Perl は 5.8 でも動く。
保守的であれば 5.8 でいいだろう。
もっともモダンな Perl は 5.10.x (5.10.1)
"Undefined Or" のサポートがあったりする。
$a //= 0;
正規表現エンジンが最適化され、ずいぶんと早くなっている。
"foo ないし bar ないし baz" にマッチさせるような正規表現は特に早くなった。
Perl6
Perl6 がついに登場します。
2種類ほど実装がある。
- Pugs
- Rakudo
Pugs の方ができることが多い。一方で、Build するのが大変。
Build するには haskell の知識がいるかもしれない。
Rakudo は実装されていない文法もあるけれど、Build がカンタン。
$ git clone git://github~~~~~ $ Configure.pl --gen-parrot $ make $ sudo make install
で問題なくインストールできるはず。
Modern Perl vs. Postmodern Perl
Perl5 と Perl6 は一緒の部分もある。違う部分もある。
Perl6 ではリファレンスを使えば、実際には@array, %hash という書き方はあんまり使う機会がなさそう。
Perl6 のクラスのつくりかた
class Point { has $.x; has $.y; } class Pont3D is Point { has $.z; }
Perl6 では無名のクラスをつくれる。
my $c = class { has $.x; }; my $o = $c.new( x=> 1);
MooseX::Declare を使うと同じようなことが Perl5 でもできるよ!
ただしとにかく重いからオススメできない。
今後の言語に必要になりそうなこと
関数をオブジェクトとして扱うこと。
これに関しては Perl6 の独壇場 Moose でも追いついていない
say (sub($x) { $x *$x} )(10); say ->$x{ $x * $x }(10); ->$x{ $x * $x }(10).say;
なんて呼び方ができる
Perl6 の { } の中は必ずクロージャであることは覚えておいたほうがいい。