複数同時にlocal化したいばやい

あけましておめでとうございます、ってもう2月かよ!

今日は物凄くどうでも良くて、凄まじく応用範囲の狭い小ネタでも提供します。

%SIGに同じ関数登録しようとして、

local $SIG{$_} = sub {...} for qw/INT TERM ALRM .../;

みたいなことをしたんだが。うまくいかなかった。

どうも、後置forの前は見えないスコープがあるようだ。localが効いてない。

後置ループにもスコープがある? - Practice of Programming

ということで、あるデータを複数同時にlocal化したいようなばやいについてです。

my @key = qw/INT TERM ALRM/;
my $sub = sub {};
{
    local @SIG{@key} = ($sub) x @key;
    # ローカル化されるお!
}

あとmapとか使えば色々な初期値を入れることも可能。

使うケースあんま無いと思いますが一応できるってことだけ。



今年もよろしくおねがいします。