IO::Handle
не перегружает функцию open()
, поэтому вы на самом деле не получаете объект IO::Handle
в $fh
.Я не знаю, почему работает строка $fh->print("Hello, world")
(возможно, потому что вы вызываете функцию print()
, а когда вы делаете такие вещи, как $foo->function
, это эквивалентно function $foo
, так что вы по сути печатаете в дескриптор файлакак вы обычно ожидаете).
Если вы измените свой код на что-то вроде:
use strict;
use IO::Handle;
open my $fh, ">>", "file.out" or die "Can't open file";
my $iofh = new IO::Handle;
$iofh->fdopen( $fh, "w" );
$iofh->print("Hello, world");
if ($iofh->can("print"))
{
print "Yes\n";
}
else
{
print "No\n";
}
... тогда ваш код будет работать так, как вы ожидаете.По крайней мере, это для меня!