このコードでは、メソッドがパラメーターを 1 つしか取りませんが、shift が 2 回使用されています。
sub regexVerify ($)
{
my $re = shift;
return sub
{
local $_ = shift;
m/$re/ ? $_ : undef;
};
}
shift が再び使用されると、ローカルの $_ の値はどうなりますか? 私は (おそらく素朴に) 無に移行すると undef になると想定していました。しかし、それが本当なら、この行は意味がありませんよね?:
m/$re/ ? $_ : undef;
上記のサブは次のように呼び出されます。
regexVerify (qr/^([a-z].*)?$/i);