Perlゼミ

  1. Perl
  2. ファイル入出力
  3. here

ファイルハンドルの概念を理解する

Perlにおけるファイルハンドルの概念はややこしいので、解説しておきます。

ファイルハンドルは実体ではなくて概念的なもの

Perlでファイルハンドルといった場合は、Perlがファイルハンドルとして認識する複数の実体のことをいっています。ファイルハンドルという実体があるわけではないのです。

Perlが、ファイルハンドルとして認識するもの

  1. シンボル( FH )
  2. 型グロブ( *FH )
  3. 型グロブへのリファレンス( \*FH )
  4. IO::Handleクラスのオブジェクト
  5. 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 "$!";

現代的なファイルオープンの書き方

現代的なファイルオープンの書き方は、

open(my $fh, "<", $file) 
  or die "Can't open file $file:$!";

です。

未定義のスカラー変数がopen関数の第一引数に渡されると、無名型グロブへのリファレンスが自動的に生成されます。「3.型グロブへのリファレンス( \*FH )」と同じ記述で、my $fh = \*FH; の部分を自動的に行っているだけです。(これは、Perlの現代の実装で、将来的にはIO::Handleへのオブジェクトを自動生成するようになるかもしれません。)

Perlの書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「今日も元気だ、Perlで元気。
ゆとりあるITエンジニアライフのために
Perl情報を前向きに発信中!」

Twitter
フォロー、いいね、リツート、コメント歓迎

Youtube

チャンネル登録、いいね、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

木本システム株式会社
ご紹介キャンペーン実施中です。契約金額の10%をご紹介料としてお支払い。

(例)30万円のシステム開発委託契約が、1年続いたら、36万円がもらえる!!!