Perl6はまだ様子見する。

そろそろかなとrakudo(#29)を触ってみた感想。もう少し待とう・・・。とりあえず触った事を記録。

試したのは加算器関数。まず、イメージで実装してみる。

sub make_adder($n) { {$n += $^i} }
my $adder30 = make_adder(30);
$adder30.(1).say;       # 31になる
$adder30.(5).say;       # 36になる
$adder30.(11).say;      # 47になる

ブロックがどうのというエラーで動かない。make_adder関数の戻り値ブロックの表記がだめらしい。しかたがないので表記を変えてみる。

sub make_adder($n) { -> $i {$n += $i} }
my $adder30 = make_adder(30);
$adder30.(1).say;       # 31になる
$adder30.(5).say;       # 36になる
$adder30.(11).say;      # 47になる

今度は変数が読み取り専用だとエラーになった。Perl6仕様によると関数の引数に値を代入する場合は明示が必要らしい。

sub make_adder($n is rw) { -> $i {$n += $i} }
my $adder30 = make_adder(30);
$adder30.(1).say;       # 31になる
$adder30.(5).say;       # 36になる
$adder30.(11).say;      # 47になる

読み書きを明示した。けど、読み取り専用と怒られる。なんでだろうか?しかたがないので、次に落ち着く。

sub make_adder { my ($n) = @_; -> $i {$n += $i} }
my $adder30 = make_adder(30);
$adder30.(1).say;       # 31になる
$adder30.(5).say;       # 36になる
$adder30.(11).say;      # 47になる

ほとんどPerl5といっしょ。。