ファイルテスト演算子



  1. Perl




  2. 演算子



  3. here

ファイルテスト演算子を使ってファイルのさまざまな情報を調べることができます。

ファイルテスト演算子 機能
-e ファイルが存在するかどうかの確認
-f 通常ファイルが存在するかどうかの確認
-d ディレクトリが存在するかどうかの確認
-s ファイルのサイズの取得
-M 最終更新から経過した日数の取得
-A 最終アクセスから経過した日数の取得
-e ファイルが存在するかどうかの確認

「-e」でファイルが存在するかどうかを確認することができます。

-e $file

ファイルが存在すると真値を、存在しないと偽値を返します。ディレクトリやシンボリックリンクなどもファイルとして扱われます。Unixではディレクトリも特別なファイルとみなしファイルという概念でとらえるからです。

用語の解説のページにリンクを張っておきました。

-f 通常ファイルが存在するかどうかの確認

「-f」で通常ファイルが存在するかどうかを確認することができます。

-f $file

通常ファイルが存在すると真値を、存在しないと偽値を返します。通常ファイルとはテキストファイルやバイナリファイルなどのデータを格納しているファイルのことです。

-d ディレクトリが存在するかどうか確認

「-d」でディレクトリが存在するかどうかを確認することができます。

-d $file

ディレクトリが存在すると真値を、存在しないと偽値を返します。

-s ファイルサイズの取得

「-s」でファイルサイズを取得できます。

-s $file

単位はバイトです。

-M 最終更新から経過した日数の取得

「-M」で最終更新から経過した日数を取得することができます。

-M $file
-A 最終アクセスから経過した日数の取得

「-A」で最終アクセスから経過した日数を取得することができます。

-A $file

サンプルプログラム

ファイルテスト演算子のサンプルです。

通常ファイルの存在確認

ファイル演算子 -f を使って通常ファイルの存在を確認するサンプルです。

use strict;
use warnings;

# 通常ファイルの存在を確認する。
# -f ファイル名

print "1: 通常ファイルの存在を確認する。 -f \n";
my $file = 'a.txt';
if (-f $file) {
  print "'$file' は、存在します。\n";
}
else { print "'$file' は、存在しません。\n" }
ディレクトリの存在確認

ファイル演算子 -d を使ってディレクトリの存在を確認するサンプルです。

use strict;
use warnings;

# ディレクトリの存在を確認する。
# -d ディレクトリ名

print "1: ディレクトリの存在を確認する。 -d \n";
my $dir = 'd';
if (-d $dir) { 
  print "'$dir' は、存在します。\n";
}
else { print "'$dir' は、存在しません。\n" }
ファイルの存在確認

ファイルテスト演算子「-e」を使ってファイルの存在を確認するサンプルです。

use strict;
use warnings;

# ファイルの存在を確認する。
# -e ファイル名
# -e を使えば、ディレクトリやファイルやシンボリックリンクなど
# を区別せずに、それが、存在するかどうかを確認できます。

print "1: ファイルの存在を確認する。 -e \n";
my $file_all_type = 'a';

if (-e $file_all_type) {
  print "'$file_all_type' は、存在します。\n";
}
else { print "'$file_all_type' は、存在しません。\n" }
ファイルサイズの取得

ファイル演算子 -s を使ってファイルサイズを取得するサンプルです。

use strict;
use warnings;

# ファイルのサイズを取得する。
# -s ファイル名
# 単位は、バイトです。

print "1: ファイルのサイズを取得する。 -s\n";
my $file = "a.txt";
if (-f $file) {
  my $file_size = -s $file;
  print "$file のファイルサイズは、$file_size バイトです。\n\n";
}
else { print "$file は、存在しませんでした。\n\n" }
use strict;
use warnings;

print "2: ファイルサイズがあるバイトを超えたら出力をとめる。\n";

my $file = "output_$$.txt";
if (-e $file) {
  die "$file は存在します。\n";
}

open my $fh, ">", $file
  or die "File open error : $!";

while (-s $file < 1_000_000) {
  my $string = ('a' x 99) . "\n";
  print $fh $string;
}

print "出力後の $file のファイルサイズは、" . -s $file . "バイトです。\n";

close $fh;
最終更新から経過した日数を取得

ファイル演算子 -M を使って最終更新から経過した日数を取得するサンプルです。

use strict;
use warnings;

# 最終更新から経過した日数を取得する。
# -M $file

print "1: 最終更新から経過した日数を取得する。\n";
my $file = "a.txt";
if (-e $file) {
  my $from_last_modify = -M $file;
  print "最終更新から $from_last_modify 日経過しています。\n";
}
else { print "$file は存在しません。\n" }
最終アクセスから経過した日数を取得

ファイル演算子 -A を使って最終アクセスから経過した日数を取得するサンプルです。

use strict;
use warnings;

# 最終アクセス(読み取り)から経過した日数を取得する。
# -A $file

print "1: 最終アクセスから経過した日数を取得する。\n";
my $file = "a.txt";
if (-e $file) {
  my $from_last_access = -A $file;
  print "最終アクセスから $from_last_access 日経過しています。\n";
}
else { print "$file は存在しません。\n" }