はちゅにっき

こっちのブログはまったり更新

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 の方ができることが多い。一方で、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 の { } の中は必ずクロージャであることは覚えておいたほうがいい。