perl 5.8 / 5.10 で closure の挙動が違った
#!/usr/bin/env perl use strict; use warnings; { my $x = 1; sub func { sub { $x }->(); } } print func(), "\n";
このスクリプトを実行すると perl 5.10.0+ なら想定通り 1 が返るが、5.8.9 以下で実行すると
> perl ex.pl Use of uninitialized value in print at ex.pl line 10.
となる。なんと!
perldelta を見たがこれに言及しているところはなさそうだった。
はじめて 5.8 / 5.10 の明確な差異を知った。
cf https://github.com/plack/Plack/commit/0176b82726ca031d942d00bf4261da9a8df0c6d9