close関数 - ファイルハンドルを閉じる
ファイルハンドルを閉じるにはclose関数を使用します。
close $fh;
もう少し詳しく書くと、close関数が呼ばれると、現在のバッファがフラッシュされて、その後にファイルハンドルが閉じられます。
close関数でファイルハンドルを閉じる必要はあるか
open関数で、ファイルオープンをした後に、close関数でファイルハンドルを閉じる必要はあるでしょうか。必ずしも必要ではありません。
一般的には、次のようにファイルをオープンします。
open(my $fh, '<', $file);
「$fh」はレキシカル変数です。そして、スコープが終われば、レキシカル変数は解放されます。そして、解放されるタイミングで、自動的にclose関数が呼び出されます。ファイルもひとつのスコープです。ですから、レキシカル変数にファイルハンドルが代入されている場合は、close関数を呼び出す必要は通常はありません。
close関数を使用する必要がある場合のいつくかの例を書いておきます。
型グロブやシンボルに、ファイルハンドルを代入した場合
ファイルハンドルは、型グロブやファイルハンドルに代入することもできます。古いソースコードでは、次のようなopenはよく見ると思います。
# 型グロブ open(*FH, '<', $file) # シンボル open(FH, '<', $file)
このような場合は、明示的にcloseしないと、スコープが終わってもファイルハンドルが開きっぱなしになるので、closeしてあげましょう。短いプログラムで、プログラムがすぐに終了する場合は、グローバルデストラクションで、ファイルが閉じられるので、closeしないでもよいですが、しておいたほうが無難でしょう。