- 41 名前:デフォルトの名無しさん mailto:sage [2013/07/26(金) 14:57:48.55 ]
- ブロックは関数渡しの構文糖だろ。例えばこういう関数
sub for_with_i { my ($fn,@lst) = (shift, @_); my $i = 0; for (@lst) { $fn->($i++, $_); } } for_with_i (sub { my ($i,$elem) = @_; print "$i: $elem\n"; }, qw(apple orange strawberry)); これが構文等を使えば sub for_with_i2 (&@){ my ($fn,@lst) = (shift, @_); my $i = 0; for (@lst) { $fn->($i++, $_); } } for_with_i2 { my ($i,$elem) = @_; print "$i: $elem\n"; } qw(apple orange strawberry); こう書けるようになる。 for_with_iは高階関数であり、それに渡した関数はもちろんスコープを作る。 無論構文糖なので後者もスコープを作る。 しかしXS版では作らない。これはおかしい。
|

|