小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

open関数の第一引数であるディスクリプタハンドルにスカラー変数を指定できるか?

通常、open関数の第一引数は、ファイルのディスクリプタハンドルです。
普通、ディスクリプタハンドルは、大文字のベアワードを指定します。
しかし、ディスクリプタハンドルにスカラー変数を指定しているケースに遭遇しました。
そこで、このケースをテストしてみました。

テスト結果

このときのスカラー変数は、型グロブのリファレンスになっていました。
したがって、まず該当ディスクリプタハンドルがどこかにあって、それの型グロブリファレンスが、デディスクリプタハンドルとして使用できるみたいです。

use strict;
my $fd;
open $fd, "test.txt";
print <$fd>;                         # 正常にアクセスできる
print "--->" . ref($fd) . "<---\n";  # 『--->GLOB<---』が表示される 
close $fd;

追記:open関数の第一引数は、ディスクリプタでなくハンドルでした。
   ちなみに、ディスクリプタはfileno関数で取得ができます。