Perl Seminar NYという集まりでPerl 6の文法をおさらいした。会場で習ってきたことをインストールしたてのPerl 6を使って自分で試してみる。
まずはバージョン表示
% ./perl6 -v
This is Rakudo Perl 6, revision 0 built on parrot 0.8.1
for darwin-thread-multi-2level.
Copyright 2006-2008, The Perl Foundation.
%
文字列連結
Perl 5の「.」は「~」になった。メソッド呼び出しが「obj->method()」から「obj.method()」になったため。
Perl 5
my $x = 'a';
my $y = 'b';
print $x . $y; # abを表示
Perl 6
my $x = 'a';
my $y = 'b';
say $x ~ $y;
三項演算子(条件演算子)
「条件 ? 正の場合の値 : 偽の場合の値」という書き方はCからの伝統だったが、「条件 ?? 正の場合 !! 偽の場合」になった。
Perl 5
my $x = 1;
print $x == 1 ? 'yes' : 'no'; # yesを表示
Perl 6
my $x = 1;
say $x == 1 ?? 'yes' !! 'no';
配列に対するx演算子はxx
Perl 6
my @array = (1, 2, 3);
my @longarray = @array xx 3;
say join',', @longarray; # 1,2,3,1,2,3,1,2,3を表示
ジャンクション
Perl 6
「3」は「1または2または3」にマッチするので「yes」を表示する。
if (3 == (1 | 2 | 3)) {
say "yes";
}
else {
say "no";
}
「1かつ2かつ3」にはマッチしないので「no」を表示する。
if (3 == (1 & 2 & 3)) {
say "yes";
}
else {
say "no";
}
その他
エラーメッセージが(まだ)不親切。セミナーの会場でもエラーメッセージがわからずにみんなではまった。
たとえば、これを見せられて「=」ではなくて「==」にしなければいけないんだな、とわかるのは無理だ。ドキュメントの整備はこれから行われるとのこと。
% ./perl6 -e 'say "yes" if 3 = (1|2|3)'
Method 'lvalue' not found for invocant of class 'PAST;Val'
current instr.: 'parrot;PAST;Compiler;as_post' pc 2924 (src/PAST/Compiler.pir:742)
called from Sub 'parrot;PAST;Compiler;if' pc 3461 (src/PAST/Compiler.pir:934)
called from Sub 'parrot;PAST;Compiler;post_children' pc 1783 (src/PAST/Compiler.pir:368)
called from Sub 'parrot;PAST;Compiler;as_post' pc 2060 (src/PAST/Compiler.pir:500)
called from Sub 'parrot;PAST;Compiler;post_children' pc 1783 (src/PAST/Compiler.pir:368)
called from Sub 'parrot;PAST;Compiler;pirop' pc 3061 (src/PAST/Compiler.pir:796)
called from Sub 'parrot;PAST;Compiler;post_children' pc 1783 (src/PAST/Compiler.pir:368)
called from Sub 'parrot;PAST;Compiler;as_post' pc 2408 (src/PAST/Compiler.pir:614)
called from Sub 'parrot;PCT;HLLCompiler;compile' pc 434 (src/PCT/HLLCompiler.pir:303)
called from Sub 'parrot;PCT;HLLCompiler;eval' pc 868 (src/PCT/HLLCompiler.pir:502)
called from Sub 'parrot;PCT;HLLCompiler;command_line' pc 1450 (src/PCT/HLLCompiler.pir:774)
called from Sub 'parrot;Perl6;Compiler;main' pc 16140 (perl6.pir:168)
%
0 件のコメント:
コメントを投稿