関数順 インデックス
目的別 インデックス

構文
 
 open ファイル・ハンドル, ファイル名
 open ファイル・ハンドル, モード, ファイル名
 open ファイル・ハンドル, モード, ファイル名, コマンドライン・オプション
 open ファイル・ハンドル, モード, インメモリファイルのためのリファレンス
 open ファイル・ハンドル

返り値
 
 ファイルのオープンに成功した場合に真

説明

  • 指定したファイルをオープンしてファイル・ハンドルに結びつけます。モードがパイプモードの場合,ファイル名で指定したコマンドを実行します。
  • パイプモードの場合,コマンドライン・オプションを渡せます。
  • 第三引数がインメモリファイルのためのリファレンスの場合,インメモリファイルを利用できます。
  • モードには()の値を指定できます。

  • < 読み込み
    > 上書き
    >> 追加書き込み
    +< 読み書き両用(既存ファイルがない場合エラー)
    +> 読み書き両用(既存ファイルがある場合上書き)
    +>> 読み書き両用(既存ファイルがある場合追記)
    |- 出力をコマンドに渡す(パイプモード)
    -| コマンドの出力を受け取る(パイプモード)

使用例

ファイルsample.txtを読み込んで内容を出力する
#!/usr/bin/perl
use strict;
use warnings;

my $filename = 'sample.txt';
open my $fh, "<", $filename or die "$!:$filename";
while (my $line = <$fh>) {
  print $line;
}
close $fh;
ファイルdata.txtに日時を追加書き込みする
#!/usr/bin/perl
use strict;
use warnings;

my $filename = 'date.txt';
open my $fh, ">>", $filename or die "$!:$filename";
print $fh scalar(localtime), "\n";
close $fh;
2引数のopen(非推奨)を使用してファイルoutput.txtにHello, world!を出力する
#!/usr/bin/perl
use strict;
use warnings;

my $filename = 'output.txt';
open my $fh, "> $filename" or die "$!:$filename";
print $fh "Hello, world!\n";
close $fh;
※open(open ファイル・ハンドル, ファイル名)の場合,モードはファイル名の中に書きます。 ただしファイル名を外部から受け取るような場合に,不正のコマンドを実行させるような攻撃を受ける脆弱性につながるため,2引数のopenは使わずにモードを使った3引数のopenをお勧めします。

ベアワードのファイル・ハンドル(非推奨)を使用してファイルdata.txtを読み込む
#!/usr/bin/perl
use strict;
use warnings;

my $filename = 'data.txt';
open FH, "<", "$filename" or die "$!:$filename";
while (my $line = <FH>) {
  print $line;
}
close FH;
※ファイル・ハンドルにFHのようなベアワードのファイル・ハンドルを指定する方法も以前は使われていますが,ファイルのオープン中に同名のファイル・ハンドルを使ってしまうと意図していない動作をしてしまうため,myを使った方法をお勧めします

UTF-8のファイルin.txtからデータを読み込み,各行の先頭の行番号を付加してout.txtに書き込む
#!/usr/bin/perl
use strict;
use warnings;

my $in_filename = 'in.txt';
my $out_filename = 'out.txt';

open my $in, "<:utf8", $in_filename or die "$!:$in_filename";
my @lines = <$in>;
close $in;

my $num = 0;
open my $out, ">:utf8", $out_filename or die "$!:$out_filename";
foreach my $line (@lines) {
  $num++;
  printf $out "%4d: %s", $num, $line;
}
close $out;
netstatコマンドを実行して、結果を取得する
#!/usr/bin/perl
use strict;
use warnings;

open my $fh, '-|', 'netstat' or die $!;
while (my $line = <$fh>) {
  print $line;
}
close $fh or die $! ? "Error:$!"
                    : "Status:$?";
※パイプ・モードの場合,ファイル・ハンドルをcloseした時に特殊変数$?でコマンドのステータス・コードを取得できます。 $?にはステータス・コードを256倍した値が入ります