読者です 読者をやめる 読者になる 読者になる

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