ファイルテスト演算子
ファイルテスト演算子を使用すれば、ファイルの属性を参照、或いは取得することができます。
◆ ファイルテスト演算子
-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 : キャラクタ型スペシャルファイルであれば -u : setuidビットが立っていれば -g : setgifビットが立っていれば -k : stickyビットが立っていれば -t : ファイルハンドルが tty としてオープンされていれば -T : ファイルがテキストファイルであれば -B : ファイルがバイナリファイルであれば -M : perl起動時における、ファイルの更新時刻からの日数 -C : perl起動時における、ファイルの作成時刻からの日数
◆ ファイルテスト演算子使用サンプルソース(ftest.pl)
use strict; use warnings; use utf8; binmode STDOUT, ':encoding(shiftjis)'; if (-r "ftest.pl") { print '読み込み可能', "\n"; } else { print '読み込み不可能', "\n"; } if (-w "ftest.pl") { print '書き込み可能', "\n"; } else { print '書き込み不可能', "\n"; } if (-x "ftest.pl") { print '実行可能', "\n"; } else { print '実行不可能', "\n"; } if (-R "ftest.pl") { print '実uid/gidで読み込み可能', "\n"; } else { print '実uid/gidで読み込み不可能', "\n"; } if (-W "ftest.pl") { print '実uid/gidで書き込み可能', "\n"; } else { print '実uid/gidで書き込み不可能', "\n"; } if (-X "ftest.pl") { print '実uid/gidで実行可能', "\n"; } else { print '実uid/gidで実行不可能', "\n"; } if (-e "ftest.pl") { print '存在する', "\n"; } else { print '存在しない', "\n"; } if (-z "ftest.pl") { print 'サイズが0です', "\n"; } else { print 'サイズが0でない', "\n"; } if (-s "ftest.pl") { print 'サイズが ' . (-s "ftest.pl") . " です", "\n"; } else { print 'サイズが0です', "\n"; } if (-f "ftest.pl") { print '通常ファイルです', "\n"; } else { print '通常ファイルでないです', "\n"; } if (-d "ftest.pl") { print 'ディレクトリです', "\n"; } else { print 'ディレクトリでないです', "\n"; } if (-l "ftest.pl") { print 'シンボリックリンクです', "\n"; } else { print 'シンボリックリンクでないです', "\n"; } if (-p "ftest.pl") { print '名前付きパイプです', "\n"; } else { print '名前付きパイプでないです', "\n"; } if (-S "ftest.pl") { print 'ソケットです', "\n"; } else { print 'ソケットでないです', "\n"; } if (-b "ftest.pl") { print 'ブロック型スペシャルファイルです', "\n"; } else { print 'ブロック型スペシャルファイルでないです', "\n"; } if (-c "ftest.pl") { print 'キャラクタ型スペシャルファイルです', "\n"; } else { print 'キャラクタ型スペシャルファイルでないです', "\n"; } if (-u "ftest.pl") { print 'setuidビットが立っている', "\n"; } else { print 'setuidビットが立っていない', "\n"; } if (-g "ftest.pl") { print 'setgifビットが立っている', "\n"; } else { print 'setgifビットが立っていない', "\n"; } if (-k "ftest.pl") { print 'stickyビットが立っている', "\n"; } else { print 'stickyビットが立っていない', "\n"; } if (-t "ftest.pl") { print 'ファイルハンドルが tty としてオープンされている', "\n"; } else { print 'ファイルハンドルが tty としてオープンされていない', "\n"; } if (-T "ftest.pl") { print 'ファイルがテキストファイルです', "\n"; } else { print 'ファイルがテキストファイルでないです', "\n"; } if (-B "ftest.pl") { print 'ファイルがバイナリファイルです', "\n"; } else { print 'ファイルがバイナリファイルでないです', "\n"; } print 'perl起動時における、ファイルの更新時刻からの日数=', -M "ftest.pl" ,"\n"; print 'perl起動時における、ファイルの作成時刻からの日数=', -C "ftest.pl" ,"\n";
◆ 補足
ファイルテスト演算子でよく使用するのは、存在有無の『-e』とサイズ取得の『-s』ですね。
尚、上記以外に『-A』の『ファイルの参照時刻からの日数』というのが、ありますが・・・今回これをテストした値が謎の値だったので、割愛しました。