-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も"真"を返します。
どのファイルテスト (もしくは、statやlstat) 演算子にも、下線だけから成る特別なファイルハンドルを与えると、前回のstat構造体が使われ、システムコールを省きます (-tには使えませんし、lstatや-lは実ファイルではなく、シンボリックリンクの情報をstat構造体に残します)。
print "読み込み可\n" if -r _;