ファイルの存在を確認する
ファイルが存在するかどうかを確認するには、ファイルテスト演算子「-e」を使用します。
-e $file
ファイルが存在すると真値を、存在しないと偽値を返します。ディレクトリやシンボリックリンクなどもファイルとして扱われます。Unixではディレクトリも特別なファイルとみなしファイルという概念でとらえるからです。
通常ファイルが存在するかどうかを確認
ディレクトリではない通常のファイルが存在するかどうかを確認したい場合は、ファイルテスト演算子「-f」で確認できます。
-f $file
通常ファイルが存在すると真値を、存在しないと偽値を返します。通常ファイルとはテキストファイルやバイナリファイルなどのデータを格納しているファイルのことです。
存在を確認できるファイルの種類
その他に、ディレクトリの存在やシンボリックリンクの存在を確認できるファイルテスト演算子もあります。
ファイルの種類 | 対応するファイル演算子 |
通常ファイル | -f |
ディレクトリ | -d |
シンボリックリンク | -l |
名前つきパイプ、パイプであるファイルハンドル | -p |
ソケット | -S |
ブロックスペシャルファイル | -b |
キャラクタースペシャルファイル | -c |
用語の解説のページにリンクを張っておきました。
サンプルプログラム
ファイルテスト演算子「-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" }
ファイル演算子 -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」を使用します。
-d $file
ディレクトリが存在すると真値を、存在しないと偽値を返します。
ファイル演算子 -d を使ってディレクトリの存在を確認するサンプルです。
use strict; use warnings; # ディレクトリの存在を確認する。 # -d ディレクトリ名 print "1: ディレクトリの存在を確認する。 -d \n"; my $dir = 'd'; if (-d $dir) { print "'$dir' は、存在します。\n"; } else { print "'$dir' は、存在しません。\n" }
ファイルサイズを取得する
ファイルサイズを取得するには、ファイルテスト演算子「-s」を使用します。
-s $file
ファイルサイズの単位はバイトです。
サンプルプログラム
ファイルテスト演算子 -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;
cos関数 - コサインを求める
cos関数を使用するとコサインを求めることができます。角度はπ(pi関数)を使って、弧度法で指定するのが簡単です。
use Math::Trig 'pi'; cos(pi/3);
(参考)Math::Trig
三角関数については以下のページで詳しく解説しています。
最終更新から経過した日数を取得する
最終更新から経過した日数を取得するにはファイルテスト演算子「-M」を使用します。
-M $file
サンプルプログラム
ファイル演算子 -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」を使用します。
-A $file
サンプルプログラム
ファイル演算子 -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" }