「_」 - ファイルテストの結果の再利用
「_」を使用するとファイルテスト演算子、あるいはstat関数の結果を再利用することができます。
if( -s $file > $size && -A _ > $from_last_access ){ ... }
-s $file で、サイズを取得しますが、実は背後では、stat を呼んでいます。そのときに、サイズ以外の情報も内部的に保存されます。_ を利用すれば、一回目のファイルテストで取得した、ファイルの情報を再利用できます。
_ を使う意義はパフォーマンスだけです。ファイルの情報を得るには、OSに対してシステムコールを行わなければなりません。システムコールは、一般的にコストがかかります。_ を使えば、すでに取得しているファイル情報を利用するので、2回目のシステムコールが省かれます。
注意点は、近接している場所以外では使わないことです。どこかで、statが呼ばれると、情報が更新されてしまいます。
サンプル
ファイルテストの結果を再利用するサンプルです。
use strict; use warnings; # ファイル演算子(あるいは stat )の結果を再利用する。 # 準備 my $file = 'a.txt'; unless (-f $file){ die "$file は存在しません。\n"; # ファイルの存在をチェック } print " 1: 古くて、ファイルサイズの大きいファイルかをチェックする\n"; my $size = 1_000_000; my $from_last_access = 90; if (-s $file > $size && -A _ > $from_last_access) { # 2回目のファイルテストには、_ が利用できる。 print "$file は、$sizeバイトより大きくて、" . "最終アクセスから $from_last_access日以上たっています。\n\n"; } else { print "$fileは、条件に当てはまりませんでした。\n" }