【Perl5】ファイルとディレクトリ操作
ファイルの読み込み
ファイルから各行を読み込むには次のようにします。
open(IN, "datas.txt");
while ($data = <IN>) { print $data; }
close(IN);
1行目で指定している「IN」変数をファイルハンドルと言います。
ファイルハンドル名は、任意の文字列で構いません。
ファイルの操作は、ファイルハンドルを指定することになります。
また、変数 $data を省略した場合は、省略時の暗黙の変数 $_ が使用されます。
下記のように書くこともできます。
open(IN, "datas.txt");
while ($_ = <IN>) { print $_; }
close(IN);
ファイルの読み込みは、1行ずつでなくて配列にまとめて読み込むこともできます。
open(IN, "datas.txt");
@xx = <IN>;
foreach $yy (@xx) {
print $yy;
}
close(IN);
また、読み込むファイルをコマンドラインから指定することもできます。
while (<>) {
print;
}
ファイル書き込み
ファイルにデータを書き込むには、次のようにします。
open(OUT, "> datas.txt");
print(OUT "こんにちわ\n");
close(OUT);
ファイルに追加書き込みするには、次のようにします。
open(OUT, ">> datas.txt");
print(OUT "こんにちわ\n");
close(OUT);
ファイル読み取りと書き込み操作
構文 | 内容 |
---|---|
open (FH, “file") open (FH, “< file") | 読み込みモード |
open (FH, “> file") | 書き込みモード |
open (FH, “>> file") | 追加書き込みモード |
open (FH, “+< file") open (FH, “+> file") open (FH, “+>> file") | 読み書き両用モード |
open (FH, “| command") | パイプ出力用 |
open (FH, “command |") | パイプ入力用 |
ディレクトリの読み取り
任意のディレクトリ内の一覧を取得するための関数として、
opendir 関数、readdir 関数、closedir 関数が実装されています。
ファイルをオープンする時と同様に
ディレクトリをオープンする時にもディレクトリハンドルを指定します。
ディレクトリハンドルも任意の文字列で構いません。
opendir 関数でディレクトリをオープンする場合は、読み出し専用となります。
※ここでは、ディレクトリハンドル= DIR とします。
関数 | 構文 | 内容 |
---|---|---|
opendir | opendir (DIR, ディレクトリ) | ディレクトリをオープンします。成功すれば真を返します。 |
readdir | readdir (DIR) | opendir によってオープンされた DIR から、ディレクトリエントリを読み込みます。 |
closedir | closedir ( ディレクトリハンドル ) | opendir によってオープンされたディレクトリを閉じます。 |
ディレクトリの中身を1行ずつ読み込む場合
use strict;
opendir(DIR, ".");
my @dir = readdir(DIR);
closedir(DIR);
foreach (@dir) {
next if (/^\.{1,2}$/); # . と .. を排除
print "$_\n";
}
ディレクトリの中身をまとめて読み込む場合
use strict;
opendir(DIR, ".");
while( my $dir = readdir(DIR) ) {
next if ($dir =~ /^\.{1,2}$/); # . と .. を排除
print "$dir\n";
}
closedir(DIR);
ディレクトリ内の情報を読み取る関数/演算子
関数/演算子 | 構文 | 内容 |
---|---|---|
glob関数 | glob( 式 ) | 「式」はワイルドカードを使ったファイル名を指定します。省略時は$_になります。 「式」にマッチしたファイル名のリストを返します。 |
ダイヤモンド演算子 | < 式 > | 同上 |
ディレクトリの生成と削除
ディレクトリの生成や削除をするための関数に mkdir 関数と rmdir 関数があります。
関数 | 構文 | 内容 |
---|---|---|
mkdir | mkdir ( ディレクトリ名, モード ) | 第一引数で指定した「ディレクトリ名」でディレクトリを作成します。 第二引数で、パーミッションを指定します。 成功すれば 1 を返し、失敗すると 0 を返します。 |
rmdir | rmdir ( ディレクトリ名 ) | 第一引数で指定した「ディレクトリ名」の中身が何も無ければ、削除します。 成功すれば 1 を返し、失敗すると 0 を返します。 「ディレクトリ名」を省略すると、$_ が使われます。 |