小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

ファイルテスト演算子

ファイルテスト演算子を使用すれば、ファイルの属性を参照、或いは取得することができます。

◆ ファイルテスト演算子

    -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』の『ファイルの参照時刻からの日数』というのが、ありますが・・・今回これをテストした値が謎の値だったので、割愛しました。