5部 関数リファレンス

-X

-X FILEHANDLE
-X EXPR
-X



-Xは以下のオプションで、ファイルテストを行うための演算子です。

演算子には以下のものがあります。

演算子 説明
-r 読み込み可能
-w 書き込み可能
-x 実行可能で
-o 実行者とファイルの所有者が同一
-R 実uid/gidで読み込み可能
-W 実uid/gidで書き込み可能
-X 実uid/gidで実行可能
-O 実uidとファイルの所有者が同一
-e ファイルが存在する
-z ファイルサイズが 0
-s ファイルサイズが 0 以外(大きさを返す)
-f ファイルは通常ファイル
-d ファイルはディレクトリ
-l ファイルはシンボリックリンク
-p ファイルは名前付きパイプ
-S ファイルはソケット
-b ファイルはブロック型の特殊ファイル
-c ファイルはキャラクタ型の特殊ファイル
-t ファイルハンドルが tty としてオープンされている
-u ファイルの setuid ビットがセットされている
-g ファイルの setgif ビットがセットされている
-k ファイルの sticky ビットがセットされている
-T ファイルがテキストファイル
-B ファイルがバイナリファイル
-M perl起動時における、ファイルの更新時刻からの日数
-A perl起動時における、ファイルの参照時刻からの日数
-C perl起動時における、ファイルの作成時刻からの日数

上記の単項演算子は、ファイル名かファイルハンドルを引数として動作し、"真"であるか否かを判定した結果を返します。引数が省略されると、-tではSTDINを調べますが、その他は$_を調べます。特に記述されていなければ、"真"として 1、"偽"として空文字、ファイルが存在しなければ、未定義値を返します。

ファイルテスト演算子の使い方

$file = "/home/httpd/html/index.html";

# ファイルが存在するか確認
if ( -e $file ){
	....
}

ローカルファイルシステムのスーパーユーザには、-r-R-w-Wに対して、常に 1 が返り、モード中のいずれかの実行許可ビットが立っていれば、-x-Xにも 1 が返ることにも注意してください。スーパーユーザが実行するスクリプトでは、ファイルのモードを調べるためには、statを行なうか、実効uidを一時的に別のものにする必要があるでしょう。

-T-Bは、ファイルの最初の数ブロックを調べて、変わった制御コードや上位ビットがセットされているような、通常のテキストには現れない文字を探します。そのような文字が、多く(30%以上) 見つかるようであれば、そのファイルは-Bファイルであると判断され、それほど見つからなければ、-Tファイルとなります。最初のブロックにヌル文字が含まれるファイルも、バイナリファイルとみなされます。-T-B
をファイルハンドルに対して用いると、最初のブロックを調べる代わりに、標準入出力バッファを調べます。調べたファイルの中身が何もないときや、ファイルハンドルを調べたときにEOFに達していたときには、-T-Bも"真"を返します。

どのファイルテスト (もしくは、statlstat) 演算子にも、下線だけから成る特別なファイルハンドルを与えると、前回のstat構造体が使われ、システムコールを省きます (-tには使えませんし、lstat-lは実ファイルではなく、シンボリックリンクの情報をstat構造体に残します)。

print "読み込み可\n" if -r _;

関連記事