Go to the first, previous, next, last section, table of contents.

ファイルテスト演算子

この演算子はファイル名かファイルハンドルを引数として一つとり、 そのファイルについて何かが真かどうかを見る。 引数を省略すると、$_ をテストする。 例外は -t で、STDIN をテストする。

真の場合は 1、偽の場合は '' か、 ファイルが存在しない場合は undefined value を返す。

優先度は論理演算子、関係演算子よりも高いが、数学演算子よりは低い。

演算子の種類は、以下の通りである。

-r        ファイルを実効 uid で読むことができる。
-w        ファイルに実効 uid で書くことができる。
-x        ファイルを実効 uid で実行することができる。
-o        ファイルの所有者が実効 uid である。

-R        ファイルを実 uid で読むことができる。
-W        ファイルに実 uid で書くことができる。
-X        ファイルを実 uid で実行することができる。
-O        ファイルの所有者が実 uid である。

-e        ファイルが存在する。

-z        ファイルサイズが 0 である。
-s        ファイルサイズが 0 でない(ファイルサイズを返す)。

-f        ファイルはプレーンファイルである。
-d        ファイルはディレクトリである。
-l        ファイルはシンボリックリンクである。
-p        ファイルは名前つきパイプ(FIFO)である。
-S        ファイルはソケットである。
-b        ファイルはブロック特殊ファイルである。
-c        ファイルはキャラクター特殊ファイルである。

-u        ファイルに setuid ビットがセットされている。
-g        ファイルに setgid ビットがセットされている。
-k        ファイルに sticky ビットがセットされている。

-t        ファイルハンドルが tty にオープンされている。

-T        ファイルはテキストファイルである。
-B        ファイルはバイナリファイルである。(-T の逆)
-M        スクリプトの実行を開始した時点でのファイルの古さ(age)(単位は日)
-A        スクリプトの実行を開始した時点でのファイルのアクセス時間
-C        スクリプトの実行を開始した時点でのファイルの inode 変更時間

演算子 -r,-R,-w,-W,-x,-X の判断は、 ファイルのモードとユーザの uid、gid のみによる。 実際に読み/書き/実行できない場合があるかもしれない。

また、スーパーユーザの場合は、 -r,-R,-w,-W は常に 1 を返し、 -x,-X については ファイルモードにいずれかの実行許可がついていれば 1 を返す。

このため、スーパーユーザが実行するスクリプトにおいて 実際のファイルモードを得るためには、stat() を行うか、 一時的に uid を他のものにセットする必要がある。

while (<>) {
     chop;
     next unless -f $_;  # 特殊ファイルは無視する
     ...
}

(注意)

ファイルテストにおいて `_'(下線)だけからなる 特殊なファイルハンドルを指定すると、 前回のファイルテスト(または stat() )での stat 構造体が用いられ、 システムコールを行わない。 (-t は除く。また、lstat()-l は 実際のファイルではなくシンボリックリンクの情報を stat 構造体に残すことを 覚えておく必要がある。)

print "Can do.\n" if -r $a || -w _ || -x _;

stat($filename);
print "Readable\n" if -r _;
print "Writable\n" if -w _;
print "Executable\n" if -x _;
print "Setuid\n" if -u _;
print "Setgid\n" if -g _;
print "Sticky\n" if -k _;
print "Text\n" if -T _;
print "Binary\n" if -B _;


Go to the first, previous, next, last section, table of contents.