以下、サンプルの説明である。 1.このスクリプトのフレームワークには init、run、interrupt、action といった 4つのサブルーチンがあり、決め打ちのサブルーチンは基本的に init と run である。interrupt と action サブルーチンは、自分で書く部分である。 2.init では $SIG 変数(この名前は決め打ちだから変更してはいけない) で、デーモンが様々な状況で中断されたときに呼び出されるサブルーチンを登録 、設定している(←割り込み処理のこと)。 ここではどんな状況でも interrupt サブルーチンを呼ぶようにしたが、各状況でそれぞれ違う処理に飛ばしたいときは、それぞれの状況で中断されたときに呼び出されるサブルーチンを書き、各 $SIG{...} によって、そのサブルーチンに飛ばせばよい。 3.init の中に Proc::Daemon::Init...; という行があるが、このたった 1行がこのスクリプトをデーモン化するおまじないである。 4.このスクリプトは続いて run を呼ぶ。この run の中身は while (1) { ... } とした無限ループである。この無限ループの中ではsleep 関数を呼んでいて、何か処理をしたあとに $SLEEP_INTERVAL 秒だけこのスクリプトに寝てもらうことになっている。初めてこれを見た人は、デーモンといっても、なんだ結局はこんなものか(なよなょ)・・・と、落胆するであろうが、そういうものである(スレッドとプロセスの違いはあるけれども、Java の runnable インターフェイスだって同じように書くはずだ)。 5.デーモンが寝ている間隔は、$SLEEP_INTERVAL でその秒数を定義しているが、スクリプトの中で何かの処理によってこの値を変化させてもよい。つまりスリープ間隔は動的にできる。 6.run の無限ループの中では action サブルーチンを呼ぶようになっている。この action というサブルーチン名は、私が勝手につけたものだから自由に変更してよい。その意味だとここに挙げているサブルーチン名 init、run、interrupt、action の 4つは各人が変更してよい。 7.基本的に action サブルーチンの中に、このスクリプトが処理したいこと(カッコよく言えばビジネスロジック)を書く。たとえば、LWP でウェブにアクセスして情報を取ってくるような処理である。