sironekotoroの日記

Perl で楽をしたい

はじめてのPerl 第6版 第16章 プロセス管理

うは!

unix では、終了値0はすべてがうまくいったことを示し、0以外の終了値は、何かが うまくいかなかったことを示します:
(中略)

これは、ほとんどの演算子の通常の判断基準である「真は良いこと─ 偽は悪いこと」の正反 対なので、よく使われる“do this or die”(「これをしなさい、さもなくば die しなさい」)というス タイルで書く場合には、真と偽を入れ換えなければなりません。

汎用クォート演算子 qx()

  • 逆クォートした時と同じ動きをする

fork

  • 自作スクリプトがあまりに遅くて、試行錯誤のときにも考えたけど結局よく分からなかったfork
  • この本でもよく分からなかった
  • ま、勉強し続ければ、いずれ理解できて活用できる時が来るだろう

練習問題16-4

  • state変数
  • 受け取ったSIGNALに応じて呼び出すサブルーチン名を変える
  • なるほどなぁ・・・
sub my_hup_handler  { state $n; say 'Caught HUP:',         ++$n }
sub my_usr1_handler { state $n; say 'Caught USR1:',        ++$n }
sub my_usr2_handler { state $n; say 'Caught USR2:',        ++$n }
sub my_int_handler  { state $n; say 'Caught INT.Exiting:'; exit }

say "I am $$";

foreach my $signal (qw (int hup usr1 usr2)) {
    $SIG{ uc $signal } = "my_${signal}_handler";
}

while (1) { sleep 1 }