「<」モード:読み込み専用でファイルを開く

Perl で open 関数を使ってファイルを開く際に、「<」モードを指定すると読み込み専用でファイルを開くことができます。ここでは Perl のプログラムの中で「<」モードを使って読み込み専用でファイルを開く方法について解説します。

(Last modified: )

「<」モードでファイルを開く

open 関数を使ってファイルを開く際に、どのような目的で利用するのかをモードで指定することができます。例えば読み込み専用でファイルを開いたり、読み書き両方の使用のためにファイルを開いたりすることができます。ここからは各モードを順に試していきます。

モードとして < を指定した場合、読み込み専用でファイルを開きます。書式は次のどちらかを使用します。

open(ファイルハンドル, "< ファイル名");
open(ファイルハンドル, "<", "ファイル名");

引数を2つ使う場合にはファイル名の前に < + 空白 を付けます。引数を 3 つ使う場合には 2 番目の引数に < を指定し、 3 番目の引数にファイル名を指定します。なおモードを省略した場合にはこのモードとなります。

< モードの場合は次のように動作します。

・読み込み専用
・ファイルが存在していた場合、ファイルを開いた時にファイルの内容を変更しない
・ファイルが存在してなかった場合、エラー

実際には次のように記述します。

open(DATAFILE, "<", "data.txt") or die("error :$!");

この場合 data.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);

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

perl sample.pl

あらかじめ sample.pl と同じディレクトリに data.txt というファイルを作成しておきました(文字コードは UTF-8 です)。ファイルには次のようなテキストデータを入力してあります。

「<」モードで読み込み専用でファイルを開く(1)

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

「<」モードで読み込み専用でファイルを開く(2)

ファイルを読み込み専用で開き、ファイルのテキストデータを読み込んで画面に表示しました。

それでは先ほどのサンプルを少し変更し、読み込み専用で開いたファイルに対して書き込みを行ってみます。

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:$!");

print DATAFILE "ピーチ\n";

close(DATAFILE);

プログラムを実行すると次のようにエラーが表示されました。

「<」モードで読み込み専用でファイルを開く(3)

読み込み専用で開いたファイルに対して書き込みを行おうとすると、上記のようにエラーが発生し書き込みは行えません。

-- --

Perl のプログラムの中で「<」モードを使って読み込み専用でファイルを開く方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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