首页 > 解决方案 > 如何使用 moose 设置默认 FileHandle 属性

问题描述

你可以从这个问题中推断出这是我的第一堂 Moose 课。

如何将属性设置FileHandle*STDOUT

这行不通。

has 'output' => (
    is => 'rw',
    isa => 'FileHandle',
    default => sub { openhandle(*STDOUT) }
);

运行时的输出是:

属性(输出)未通过类型约束,因为: 'FileHandle' 的验证失败,值为 *main::STDOUT

文件声称:

FileHandle 接受 IO::Handle 对象或内置 perl 文件句柄(参见 Scalar::Util 中的“openhandle”)。

我错过了什么?

谢谢。

-E

标签: perlmoosefilehandle

解决方案


我不知道您在那里可能还需要什么,但这适用于初学者

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.


推荐阅读