perlでファイルの読み込みとか作成とか削除のまとめ

perlでファイル操作をする方法をまとめていきます。

なるべく分かりやすさ重視で説明するので、厳密には違うと言う部分が多々あるかと思いますが、詳細は公式ドキュメントをみてください。

perlでファイルを読み込む方法

perlでファイルを読み込むためには、open関数を使って「どのファイルを開くのか」を指定する必要があります。

main.pl
sample.txt

例えば、上記のファイル構成になっているとしてmain.plを実行してファイルを開く場合は、以下のようにします。

my $file = 'sample.txt';
open(my $fh, '<',  $file);

open関数はopen(my $fh, '<', $file)のように書いていきます。第3引数には読み込みたいファイル名、第2引数には指定したファイルをどのように操作したいのかを書きます。今回は'<'と指定したので、sample.txtを読み込むようになりました。(もし>とすれば、sample.txtに書き込みができます。詳しくは後述。)

そして、第1引数のmy $fhは「ファイルハンドル」と言うもので、どのファイルをどのように扱いたいかを示した変数になります。今回は、「sample.txtを読み込みたい」と言う情報を$fh変数に格納しました。

実際にファイルを読み込んでみる

実際にファイルを読み込むのはどうするかと言うと、以下のようにします。

my $file = 'sample.txt';
open( my $fh, '<', $file );
while (<$fh>) {
print $_;
}

上記のコードは何をやっているかと言うと、<$fh>とすることでsample.txtの中身を一行ずつ取り出してくれます。while (<$fh>)とすることで一行を読み込めなくなるまで繰り返し処理をしてくれます。

whileの中の処理のprint $_;ですが、$_はperl側が自動で用意してくれる変数。$_は、いつどのように使うかで意味が変わってきますが、今回はwhile (<$fh>)で取り出された一行の内容が$_変数に格納されています。

perlでのファイルの書き込み

perlでファイルの書き込みをしたい場合は、読み込みの時と同様にopen関数を使います。

my $file = 'sample.txt';
my $content = 'hello world';
open( my $fh, '>', $file );
print $fh $content;

読み込みと違う点は、open( my $fh, '>', $file );の第2引数が>となっていることです。そして、print $fh $content;とすることでファイルハンドル$fh$contentの内容を書き込みます。(print $fh $content;の$fhと$contentの間にピリオドは不要です)

また、書き込み時にファイルがなければ、ファイルを新規作成した上で書き込みしてくれます。

ファイルに追加書き込みをしたい場合

上記で紹介したファイル書き込みはファイルの中身を上書きしてしまうので、ファイルに文字を追加したい場合は使えません。

もし追加書き込みをしたい場合は、先ほどのopen関数を以下のように書けばOKです。

open( my $fh, '>>', $file );

>>>に変えることで追加書き込みになります。

ファイルを削除したい場合

ファイルを削除したい場合は、unlink関数を使えば良いです。

unlink 'sanple.txt';

これでsanple.txtは削除されました。

ReratedPosts

perlのコードでよく見かけるrequire、use、BEGINの役割や関係についてまとめる
Mojoliciousで「[error] Role::Tiny 2.000001+ is required for roles」のエラーが出た時の対処法
PerlのDBIで新規レコードを作成(INSERT)した時にレコードのIDを取得する方法
perlで正規表現で文字列を置換したり、新しい変数に格納する方法
Mojoliciousで文字化けが起こった時の対処法2つ
Mojoliciousでディレクトリの場所を変数(属性)として格納する方法