open関数 - ファイルをオープンする
ファイルをオープンするには、open関数を使用します。第一引数は、取得したファイルハンドルを代入するための変数、第二引数はオープンモード、第三引数は、ファイル名です。ファイルのオープンが成功したときは、真が、失敗したときは偽が返ります。
$ret = open($fh, $mode, $file);
ファイルをオープンするときは次のような書き方が一般的です。これを基礎にして、その他の方法を学習してください。
open(my $fh, "<", $file) or die "Can't open $file:$!";
「<」というのは、オープンモードで、ファイルを読み込むときは、「<」を指定します。
よく使われるオープンモード
オープンモード | 記号 |
読み込み | < |
書き込み | > |
追加書き込み | >> |
オープン関数の第2引数に指定します。ダブルクォートかシングルクォートで囲んで文字列として渡します。
読み込みモード <
読み込みモードとは、ファイルを読み込み専用で開くモードのことです。ファイルが存在しない場合は、エラーになります。
書き込みモード >
書き込みモードとは、ファイルを書き込み専用で開くモードのことです。開いた瞬間にもともとのファイルの内容は削除されます。ファイルが存在しない場合は作成されます。
追加書き込みモード >>
追加書き込みモードとは、ファイルを追加書き込み専用で開くモードのことです、現在のファイルの末尾から書き込みが始まります。ファイルが存在しない場合は作成されます。
ファイルを読み込んで、そのファイルに書き込みたいときはときはどうするか?
ファイルのオープンモードには、このほかに読み込み書き込み両用のモードというのがありますが、このモードは一般的な用途では使いません。読み書き両用モードは、ファイルを読み込んで、そのファイルに書き込む場合に利用すると思いがちですが違います。
のちのち詳しく説明しますが、この方法は非常に危険です。安全に行うには以下の手順を踏みます。
- ファイルを読み込む。
- 一時ファイルに変更箇所を含んだすべての行を書き出す。
- 元のファイルを削除する。
- 一時ファイルを元のファイル名に変更する。
例外処理
ファイルをオープンしたときは、あわせて例外処理を行う必要があります。ファイルのオープンに失敗した場合は、その後の処理に移っても意味がないので、die関数を使って、プログラムを終了させます。「$!」には、ファイルのオープンが失敗した原因が代入されているので、それもエラーメッセージに含めておきましょう。
open(my $fh, "<", $file) or die "Can't open $file:$!";
2引数のオープン - 推奨されない
古いソースコードには、二引数のopen関数が利用されていることがありますが、現在は、三引数のopen関数を使うことが推奨されています。
# 2引数のopen関数は非推奨 open($fh, "<$file");
サンプル
open関数を使ったファイルオープンのサンプルです。
use strict; use warnings; # 存在するファイル名を引数に渡してください。 my $file = shift; open(my $fh2, "<", $file) or die "Can't open file $file: $!";