ファイルハンドルの概念を理解する
Perlにおけるファイルハンドルの概念はややこしいので、解説しておきます。
ファイルハンドルは実体ではなくて概念的なもの
Perlでファイルハンドルといった場合は、Perlがファイルハンドルとして認識する複数の実体のことをいっています。ファイルハンドルという実体があるわけではないのです。
Perlが、ファイルハンドルとして認識するもの
- シンボル( FH )
- 型グロブ( *FH )
- 型グロブへのリファレンス( \*FH )
- IO::Handleクラスのオブジェクト
- IO::Handleオブジェクトを継承したクラスのオブジェクト( IO::File など )
Perlが、ファイルハンドルとして認識するものは、上記の5つです。以下の記述はすべて有効です。
# 1. シンボル FH open(FH, "<", $file) or die "$!"; # 2. 型グロブ *FH open(*FH, "<", $file) or die "$!"; # 3. 型グロブへのリファレンス \*FH my $fh = \*FH; open($fh, "<", $file) or die "$!"; # 4. IO::Handleオブジェクト use IO::Handle; my $fh = IO::Handle->new; open( $fh, "<", $file ) or die "$!"; # 5. IO::Fileオブジェクト( IO::Handleを継承 ) use IO::File; my $fh = IO::File->new; open($fh, "<", $file) or die "$!";