如何使用 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"); 

打印 hiSTDOUT