「_」 - ファイルテストの結果の再利用
「_」を使用するとファイルテスト演算子、あるいは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" }
Perlゼミ

