Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  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" }
  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。