|
|
Perl関数リファレンス 入出力に関する関数 |
H.Kamifuji . |
Perlの組み込み関数の中で入出力に関する関数のリファレンスです。 当ページでは、Linux CentOS7 の Gnome で動作テストしています。 |
|
「open」関数はファイルを開きファイルハンドルを割り当てます。 ※ファイル操作について詳しくは「ファイル操作」を参照して下さい。 open open(FILEHANDLE[,EXPR]) open(FILEHANDLE[,MODE,EXPR]])ファイル名及びファイルハンドルを指定してファイルを開きファイルハンドルを割り当てます。 パラメータ: FILEHANDLE ファイルハンドル EXPR ファイル名 MODE モード 戻り値: ファイルを開くことに成功したら真(true)、失敗したらundef 1番目の引数にはファイルとのコネクションに対して割り当てるファイルハンドル名を指定します。2番目の引数にはファイル名を指定します。 モードはファイル名に含めて記述することも出来ますが、別に指定することも出来ます。別に指定する場合は2番目の引数がモード、3番目の引数がファイル名となります。 モードはファイルをどのように開くのかを指定します。以下のモードが指定可能です。
書き込み可能なモードの場合に、ファイルサイズが0になる場合はいったんデータが全て消去された後で先頭から書き込みされます。ファイルの変更が無い場合は既存のファイルのデータは変更せず、ファイルの最後から追加で書き込みが行われます。 モードが指定されていない場合は「<」が指定された場合と同じく読み込み専用となります。 また次のようなモードも用意されています。
ファイル名の代わりにコマンドを記述し、「|」を先頭または最後に付けることでファイルハンドルとコマンドをパイプでつなげることが出来ます。 またファイル名として「-」を指定した場合は標準入力を開き、「->」を指定した場合は標準出力を開きます。
具体的には次のように記述します。 open(DATA, "filename.txt"); open(DATA, "> filename.txt"); open(DATA, ">", "filename.txt");ファイル名とモードを合わせて指定する場合は「モード ファイル名」のような記述方法となります。 では簡単なプログラムで確認して見ます。 test1-1.pl サンプルプログラム下記のサンプルを実行してみよう。# open関数 # 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);上記を「test1-1.pl」の名前で保存してから次のように実行して下さい。 なお「data.txt」と言うテキストファイルをプログラムと同じディレクトリに設置しています。このファイルの文字コードはUTF-8(BOM無し)です。 ![]() 実行すると「dta.txt」ファイルに記述された内容を読み込み画面に表示します。そして「追加」と言う文字列を「data.txt」ファイルに追加で書き出しています。 ![]() 再度同じプログラムを実行すると追加された文字も含めて読み込みが行われます。 Linux 環境での実行結果は、下記です。シフトJIS で出力されるので nkf -w で UTF-8 に変換しています。 [xxxxxxxx@dddddddddd Io]$ perl test1-1_u.pl | nkf -w 日本語 document [xxxxxxxx@dddddddddd Io]$ perl test1-1_u.pl | nkf -w 日本語 document 追加 [xxxxxxxx@dddddddddd Io]$ |
「close」関数は開いているファイルハンドルを指定してファイルを閉じます。 ※ファイル操作について詳しくは「ファイル操作」を参照して下さい。 close close([FILEHANDLE])ファイルハンドルを指定してファイルを閉じます。 パラメータ: FILEHANDLE ファイルハンドル 戻り値: ファイルを閉じることに成功したら真(true)、失敗したら偽(false) 1番目の引数にはファイルとのコネクションに対して割り当てるファイルハンドル名を指定します。開いているファイルハンドルを指定する必要があります。引数が省略された場合は現在使われているファイルハンドルを使用します。 具体的には次のように記述します。 open(DATA, "filename.txt"); close(DATA);では簡単なプログラムで確認して見ます。 test2-1.pl サンプルプログラム下記のサンプルを実行してみよう。# close関数 # 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"); if (close(DATAFILE)){ print "ファイルは閉じるのに成功しました\n"; }else{ print "ファイルは閉じるのに失敗しました\n"; } if (close(DATAFILE)){ print "ファイルは閉じるのに成功しました\n"; }else{ print "ファイルは閉じるのに失敗しました\n"; }上記を「test2-1.pl」の名前で保存してから次のように実行して下さい。 ![]() なお「data.txt」と言うテキストファイルをプログラムと同じディレクトリに設置しています。このファイルの文字コードはUTF-8(BOM無し)です。 開いていないファイルハンドルを閉じようとすると失敗します。 Linux 環境での実行結果は、下記です。シフトJIS で出力されるので nkf -w で UTF-8 に変換しています。 [xxxxxxxx@dddddddddd Io]$ perl test2-1_u.pl | nkf -w ファイルは閉じるのに成功しました ファイルは閉じるのに失敗しました [xxxxxxxx@dddddddddd Io]$ |
「print」関数は指定したファイルハンドルに対して文字列を出力します。 print print([FILEHANDLE ]LIST)ファイルハンドルに対して文字列を出力します。 パラメータ: FILEHANDLE ファイルハンドル LIST 出力する文字列のリスト 戻り値: 成功したら真(true)、失敗したら偽(false) 1番目の引数には文字列を出力する先のファイルハンドルを指定します。省略された場合は標準出力であるSTDOUTが使用されます。ファイルハンドルを指定する場合は開いているファイルハンドルを指定する必要があります。 2番目の引数には出力する文字列を指定します。複数の文字列を出力する場合はカンマ(,)で区切って続けて指定して下さい。 ファイルハンドルと出力文字列の両方を指定する場合には、カンマ(,)では無く空白で区切りますので注意して下さい。 具体的には次のように記述します。 print "テスト";ファイルハンドルを省略した場合にはファイルハンドルとして標準出力が使用されますので画面に対して出力が行われます。 open(DATA, ">", "filename.txt"); print DATA "テスト"; close(DATA);「open」関数を使用して書き込みモードでファイルを開き、ファイルハンドルを指定して書き込みを行った場合にはファイルハンドルに関連付けられたファイルに対して出力が行われます。(どのように出力されるのかはモードによります)。 print "テスト", "test", "\n";複数の出力文字列を指定する場合にはカンマで区切って続けて記述して下さい。連続して出力されます。 ※ファイル操作について詳しくは「ファイル操作」を参照して下さい。 では簡単なプログラムで確認して見ます。 test3-1.pl サンプルプログラム下記のサンプルを実行してみよう。# print関数 # use strict; use warnings; use utf8; use open ":utf8"; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; print "Hello\n"; print STDOUT "こんにちは\n"; my $name = "安藤"; my $old = 16; print $name, "=", $old, "\n"; open(DATA, ">", "data3-1.txt"); print DATA "sample"; close(DATA);上記を「test3-1.pl」の名前で保存してから次のように実行して下さい。 ![]() 画面に対して出力を行った結果と、ファイルをを新規に作成し書き込みを行っています。新しく「data3-1.txt」ファイルが作成され次のような文字列が書き込まれています。 ![]() Linux 環境での実行結果は、下記です。シフトJIS で出力されるので nkf -w で UTF-8 に変換しています。 [xxxxxxxx@dddddddddd Io]$ perl test3-1_u.pl | nkf -w Hello こんにちは 安藤=16 [xxxxxxxx@dddddddddd Io]$ |
|