如何使用 moose 设置默认的 FileHandle 属性
How do I set a default FileHandle attribute with moose
你可以从问题中推断这是我的第一只驼鹿class。
如何将属性 FileHandle
设置为 *STDOUT
?
这行不通。
has 'output' => (
is => 'rw',
isa => 'FileHandle',
default => sub { openhandle(*STDOUT) }
);
运行时的输出为:
Attribute (output) does not pass the type constraint because: Validation failed for 'FileHandle' with value *main::STDOUT
文档声称:
FileHandle accepts either an IO::Handle object or a builtin perl
filehandle (see "openhandle" in Scalar::Util).
我错过了什么?
谢谢。
-E
我不知道你还需要什么,但这对初学者有用
WithFH.pm
package WithFH;
use feature 'say';
use Moose;
has 'fh' => (is => 'ro', isa => 'FileHandle', default => sub { \*STDOUT } );
sub say {
my $self = shift;
say { $self->{fh} } "@_";
}
__PACKAGE__->meta->make_immutable;
1;
和主要
use warnings;
use strict;
use feature 'say';
use WithFH;
my $wfh = WithFH->new;
$wfh->say("hi");
打印 hi
到 STDOUT
。
你可以从问题中推断这是我的第一只驼鹿class。
如何将属性 FileHandle
设置为 *STDOUT
?
这行不通。
has 'output' => (
is => 'rw',
isa => 'FileHandle',
default => sub { openhandle(*STDOUT) }
);
运行时的输出为:
Attribute (output) does not pass the type constraint because: Validation failed for 'FileHandle' with value *main::STDOUT
文档声称:
FileHandle accepts either an IO::Handle object or a builtin perl filehandle (see "openhandle" in Scalar::Util).
我错过了什么?
谢谢。
-E
我不知道你还需要什么,但这对初学者有用
WithFH.pm
package WithFH;
use feature 'say';
use Moose;
has 'fh' => (is => 'ro', isa => 'FileHandle', default => sub { \*STDOUT } );
sub say {
my $self = shift;
say { $self->{fh} } "@_";
}
__PACKAGE__->meta->make_immutable;
1;
和主要
use warnings;
use strict;
use feature 'say';
use WithFH;
my $wfh = WithFH->new;
$wfh->say("hi");
打印 hi
到 STDOUT
。