您可能会从这个问题推断出这是我的第一个Moose课程。
如何将属性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接受IO :: Handle对象或内置的perl filehandle(请参见Scalar :: Util中的“ openhandle”)。
我想念什么?
谢谢。
-E
答案 0 :(得分:2)
我不知道您在那里可能还需要什么,但这对初学者来说很有效
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
。