ファイルのオープンとクローズ

プログラムからファイルに対して何らかの操作を行う場合、まずファイルをオープンする必要があります。またファイルに対する操作が不要になった場合はファイルをクローズする必要があります。ここでは 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

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

ファイルのオープンとクローズ(1)

今回は sample.pl を保存したのと同じディレクトリにあらかじめ data.txt というファイルを作成して設置してあります。(ファイルの中身は何でも構いません)。

ファイルのオープンとクローズ(1)

data.txt と data1.txt という 2 つのファイルを開き、開くのに成功した場合はファイルを閉じました。 data.txt は実際に存在しているファイルなのでファイルを開き、そのあとで閉じることができました。 data1.txt は存在していないファイルだったので、ファイルを開くのに失敗しました。

-- --

Perl のプログラムの中からファイルをオープンしたりクローズしたりする方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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