ref
関数のドキュメントからの関連する抜粋を次に示します。
返される値は、参照が参照されているもののタイプによって異なります。組み込み型には次のものがあります。
SCALAR ARRAY HASH CODE REF GLOB LVALUE FORMAT IO VSTRING Regexp
これに基づいてref
、ファイルハンドルを呼び出すと が返されると想像しました'IO'
。驚くべきことに、そうではありません。
use strict;
use warnings;
open my $fileHandle, '<', 'aValidFile';
close $fileHandle;
print ref $fileHandle; # prints 'GLOB', not 'IO'
perlref
理由を説明しようとします:
バックスラッシュ演算子を使用して IO ハンドル (ファイルハンドルまたはディレクトリハンドル) への真の参照を作成することはできません。得ることができるのは、実際には完全なシンボル テーブル エントリである型グロブへの参照です [...] ただし、型グロブとグロブ参照を IO ハンドルのように使用することはできます。
その場合、どのような状況でref
戻るでしょう'IO'
か?