stat バッファ

perl でファイルのテスト等を行うと、システムコールが発行されるが、そのstatの結果はバッファに格納される。 そのバッファから値を読み込むためには、"_" ファイルハンドルにアクセスする。

例えば、引数に指定されたファイル名のファイルが自分が作成したファイルかテストし、そのファイルのサイズを表示するスクリプトは以下のように書ける。

#! /usr/bin/perl
if (-o $ARGV[0]) {
  warn "$ARGV[0] is owned.";
  warn "$ARGV[0] is " . (-s _) . "bytes";
}

$_ と似ていてややこしいが、_ とは別物、ということだ。うーん、こんなのすぐに忘れちゃいそうだ。これのメリットは、比較的重い処理であるシステムコールの呼び出しが _ 参照時には行われないために、処理の無駄がないことだ。