Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発
  1. Perl
  2. 演算子
  3. here

「_」 - ファイルテストの結果の再利用

_」を使用するとファイルテスト演算子、あるいは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" }