如何使用驼鹿设置默认的FileHandle属性

时间:2019-03-09 01:48:46

标签: perl moose

您可能会从这个问题推断出这是我的第一个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

1 个答案:

答案 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