割と大きな変更が多かった Perl 5.10 と比べて Perl 5.12 の変更点は小粒。内部的なことはよくわからんので、文法上の新機能を(わかる範囲で)いくつか纏めてみた。
1. ヤダヤダ演算子
「未実装であること」を表す演算子「...
」が追加された。Perl6 に載る予定の機能みたいだけど、このネーミングは何なんだw 実際に英語でも「Yada Yada Operator」である。以前のバージョンからある(そしてほとんど使われていない)範囲演算子「...
」と紛らわしい。未実装な関数(ブロック)に対するプレースホルダとして使うことが狙いだ。こんな風にして使う。
例
my %funcs = ( f1 => sub { "OK!" }, f2 => sub { 0 .. 9 }, # 範囲演算子 f3 => sub { 0 ... 9 }, # 範囲演算子 f4 => sub { ... }, # ヤダヤダ演算子 ); for ( sort keys %funcs ) { print "$_ => "; eval { say $funcs{ $_ }->() }; $@ and say $@; }
出力
f1 => OK! f2 => 0123456789 f3 => 0123456789 f4 => Unimplemented at F:\TEMP\VINCF.tmp line 5.
2. each
演算子の拡張
主に、ハッシュを網羅的に走査するのに使われる each
演算子が配列にも使用可能になった。ハッシュの時と違ってちゃんと配列の順番通りに結果が出てくるみたい。配列を走査するときに、for
文で添え字のための変数を用意する手間が省けていいかもね。
例
my @ary = qw! a b c !; while ( my ( $i, $v ) = each @ary ) { say "$i => $v"; }
出力
0 => a 1 => b 2 => c
3. 後置 when
文修飾子として when
節を使用可能になった。見た目が自然な文章により近くなったね。
例
for ( 0 .. 4 ) { my $i = 1 + int rand 100; printf "%3d : ", $i; given ( $i ) { say "Perfect!" when [ 67 .. 100 ]; say "Good!" when [ 34 .. 66 ]; say "mmm..." when [ 1 .. 33 ]; default { say "Error!" } } }
出力
10 : mmm... 96 : Perfect! 39 : Good! 64 : Good! 85 : Perfect!
4. ローカルな delete
「delete local ハッシュ要素
」という構文が用意された。スコープ内でローカルに要素を削除することが出来る。いまいち使い道が……。モジュールを呼び出すときに %INC
ハッシュから要素を消して依存関係をいじったりするのだろうか。
例
my %hash = ( a => 3, b => 6, c => 9 ); { print "test1 : "; delete local $hash{b}; say $hash{b} // "NONE!"; } print "test2 : "; say $hash{b} // "NONE!";
出力
test1 : NONE! test2 : 6
Yada Yada は米口語から来てるっぽい。日本語だと、「かくかくしかじか」、「うんたらなんたら」に対応か?
参照:
http://www.english-for-students.com/Yada-Yada-1.html
なるほど。情報ありがとうございます。
不可解な名称でしたが意味はあったんですね。
もっと適切なページを発見。こちらは yada yada yada だが、意味は yada yada と同じ。
http://engslang.blogspot.com/2010/03/yada-yada-yada.html
Yada Yada operator の訳語としては「などなど演算子」が良さそう。語感も似てるし。
こっちは正確な由来も書いてありますね。かなり砕けた言葉を正式名(?)に採用したんだな。