%SIGに限った事ではないのだけれども、ここでまず注意しなくてはいけないのが、%SIGはグローバル変数であること。ある関数foo()内で%SIGをいじったあとにreturnすると、foo()を呼び出したスコープでもその値は有効になってしまう。これだと自分はよくても他のモジュール等に影響を与える可能性がある。そこでまず癖としてlocal修飾子を使う癖をつけてほしい local $SIG{INT} = sub { warn "got SIGINT (OUTSIDE)" }; sub foo { warn "inside foo()"; local $SIG{INT} = sub { warn "got SIGINT (INSIDE foo)" }; sleep 10; } warn "sleeping..."; sleep 10; foo(); warn "outside foo()"; sl
![Perlシグナル処理 : D-7 <altijd in beweging>](https://cdn-ak-scissors.b.st-hatena.com/image/square/03bea4fc35460bf85d913a2d7e23ba7df4215f7c/height=288;version=1;width=512/https%3A%2F%2Flivedoor.blogimg.jp%2Flestrrat%2Fimgs%2Fa%2F0%2Fa09af6f7.png)