質問: -m "test.txt"; print $elapse; print "\n"; if($elapse >= 0.5){ unlink("test.txt"); exit; } sleep 1; } ファイルの最終更新からの経過時間を監視して、最終更新時間より12時間経過したら自動で削除するプログラムなのですが、常に同じ時間が表示されてしまいます。 何故、このような挙動になるのでしょうか? また、どのようにすればスマートに経過時間を調べて削除できますか?
回答: perlで疑問があるときは、まずは perldoc を調べてみましょう。 https://perldoc.jp/func/-x > -m 「スクリプト実行開始時刻から」 ファイル修正時刻を引いたもの(日単位)。 (強調は回答者によるもの) そのスクリプトでは、実行開始のあと、終了せずにループで繰り返しているので、「スクリプト実行開始時刻」は変化しません。 よって、$elapse が変化するのは、ファイルtest.txtが変化したときだけだし、そのときには >=0.5にはなりません。 https://perldoc.jp/func/stat でファイル情報を取得し、 https://perldoc.jp/func/time で得た現在の秒数と比較する、というあたりでしょう。 cpanで探せば、現在からの時間を求められるモジュールがあるかもしれません。