【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 とします。

関数構文内容
opendiropendir (DIR, ディレクトリ)ディレクトリをオープンします。成功すれば真を返します。
readdirreaddir (DIR)opendir によってオープンされた DIR から、ディレクトリエントリを読み込みます。
closedirclosedir ( ディレクトリハンドル )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 関数があります。

関数構文内容
mkdirmkdir ( ディレクトリ名, モード )第一引数で指定した「ディレクトリ名」でディレクトリを作成します。
第二引数で、パーミッションを指定します。
成功すれば 1 を返し、失敗すると 0 を返します。
rmdirrmdir ( ディレクトリ名 )第一引数で指定した「ディレクトリ名」の中身が何も無ければ、削除します。
成功すれば 1 を返し、失敗すると 0 を返します。
「ディレクトリ名」を省略すると、$_ が使われます。

Perl5入門

Posted by 管理人