ファイルのオープンとクローズ
プログラムからファイルに対して何らかの操作を行う場合、まずファイルをオープンする必要があります。またファイルに対する操作が不要になった場合はファイルをクローズする必要があります。ここでは Perl のプログラムの中からファイルをオープンする方法およびファイルをクローズする方法について解説します。
(Last modified: )
ファイルを開く
ファイルを開くためには open
関数を使用します。よく使われる書式は次の通りです。
open(ファイルハンドル名, "ファイル名"); open(ファイルハンドル名, "モード", "ファイル名");
対象のファイル名を指定し、ファイルとの間で開くコネクションに付ける名前をファイルハンドルとして指定します。モードについては別のページで詳しく解説します。
例えば次のように記述します。
open(DATAFILE, "data.txt");
上記の場合では、プログラムが実行されているディレクトリと同じディレクトリ上にある data.txt に対して読み込み専用でコネクションを開き、コネクションに対して DATAFILE と言うファイルハンドルを設定します。
open
関数はファイルを開くことに成功すると真(true)を返し、失敗すると未定義値(undef)を返します。( open
関数について詳しくは「open関数:ファイルを開く」を参照して下さい)。
ファイルを閉じる
ファイルの中身を読み込んだり書き込んだりを行ったあとで、ファイルに対する操作が必要なくなった時点でファイルを閉じるようにします。
ファイルを閉じるためには close
関数を使います。書式は次の通りです。
close(ファイルハンドル名);
例えば次のように記述します。
open(DATAFILE, "data.txt"); close(DATAFILE);
引数には開いているコネクションに対して付けられたファイルハンドル名を指定します。 close
関数はファイルを閉じることに成功すると真(true)を返し、失敗すると偽(false)を返します。( close
関数について詳しくは「close関数:ファイルを閉じる」を参照して下さい)。
それでは簡単なサンプルを作成します。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; if (open(DATAFILE, "data.txt")){ print "data.txtを開く事に成功しました\n"; if (close(DATAFILE)){ print "data.txtを閉じる事に成功しました\n"; }else{ print "data.txtを閉じる事に失敗しました\n"; } }else{ print "data.txtを開く事に失敗しました\n"; } if (open(DATAFILE, "data1.txt")){ print "data1.txtを開く事に成功しました\n"; if (close(DATAFILE)){ print "data1.txtを閉じる事に成功しました\n"; }else{ print "data1.txtを閉じる事に失敗しました\n"; } }else{ print "data1.txtを開く事に失敗しました\n"; }
テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。
perl sample.pl
次のように実行結果が表示されます。
今回は sample.pl を保存したのと同じディレクトリにあらかじめ data.txt というファイルを作成して設置してあります。(ファイルの中身は何でも構いません)。
data.txt と data1.txt という 2 つのファイルを開き、開くのに成功した場合はファイルを閉じました。 data.txt は実際に存在しているファイルなのでファイルを開き、そのあとで閉じることができました。 data1.txt は存在していないファイルだったので、ファイルを開くのに失敗しました。
-- --
Perl のプログラムの中からファイルをオープンしたりクローズしたりする方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。