open関数:ファイルを開く

Perl で用意されている組み込み関数の一つである open 関数の使い方です。 open 関数はファイルを開きファイルハンドルを割り当てます。

※ファイル操作について詳しくは「ファイル操作」を参照して下さい。

(Last modified: )

open関数の書式と基本的な使い方

open 関数は次のように定義されています。

open
open(FILEHANDLE[,EXPR])
open(FILEHANDLE[,MODE,EXPR]])
ファイル名及びファイルハンドルを指定してファイルを開きファイルハンドルを
割り当てます。

パラメータ:
  FILEHANDLE  ファイルハンドル
  EXPR  ファイル名
  MODE  モード
戻り値:
  ファイルを開くことに成功したら真(true)、失敗したらundef

1 番目の引数にはファイルとのコネクションに対して割り当てるファイルハンドル名を指定します。 2 番目の引数にはファイル名を指定します。

モードはファイル名に含めて記述することもできますが、別に指定することもできます。別に指定する場合は 2 番目の引数がモード、 3 番目の引数がファイル名となります。

モードはファイルをどのように開くのかを指定します。以下のモードが指定可能です。

記号モードファイルが存在した場合ファイルが存在しない場合
<読み込み専用変更無しエラー
>書き込み専用ファイルサイズを0にする新規作成
>>書き込み専用変更無し新規作成
+<読み書き両用変更無しエラー
+>読み書き両用ファイルサイズを0にする新規作成
+>>読み書き両用変更無し新規作成

書き込み可能なモードの場合に、ファイルサイズが 0 になる場合はいったんデータが全て消去された後で先頭から書き込みされます。ファイルの変更が無い場合は既存のファイルのデータは変更せず、ファイルの最後から追加で書き込みが行われます。

モードが指定されていない場合は < が指定された場合と同じく読み込み専用となります。

また次のようなモードも用意されています。

記号モード
| commandファイル名をコマンドとして扱い、ファイルハンドルからの出力をパイプでコマンドへ渡す。
command |ファイル名をコマンドとして扱い、コマンドの実行結果をパイプでファイルハンドルへ渡す

ファイル名の代わりにコマンドを記述し、 | を先頭または最後に付けることでファイルハンドルとコマンドをパイプでつなげることができます。

またファイル名として - を指定した場合は標準入力を開き、 -> を指定した場合は標準出力を開きます。

ファイル意味
-標準入力を開く
->標準出力を開く

具体的には次のように記述します。

open(DATA, "filename.txt");
open(DATA, "> filename.txt");
open(DATA, ">", "filename.txt");

ファイル名とモードを合わせて指定する場合は「モード ファイル名」のような記述方法となります。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
use open ":utf8";
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

open(DATAFILE, "< data.txt") or die("Error");

while(my $line = <DATAFILE>){
  chomp($line);
  print "$line\n";
}

close(DATAFILE);

open(DATAFILE, ">>", "data.txt") or die("Error");
print DATAFILE "愛知県\n";
close(DATAFILE);

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

open関数:ファイルを開く(1)

今回はあらかじめ sample.pl と同じディレクトリに data.txt というファイルを作成しておきました。このファイルの中身は次のようになっており、プログラムを実行するとファイルを読み込んで画面に出力します。

open関数:ファイルを開く(2)

またプログラムでは data.txt に追加で文字列を書き込んでいます。プログラムを実行したあとにファイルを開いてみると、追加した文字列がファイルに書き込まれているのが確認できます。

open関数:ファイルを開く(3)

-- --

Perl で用意されている組み込み関数の一つである open 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。