Как установить атрибут FileHandle по умолчанию с помощью Moose - PullRequest
2 голосов
/ 09 марта 2019

Из вопроса вы можете сделать вывод, что это мой первый урок лося.

Как мне установить атрибут 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 дескриптор файла (см. «openhandle» в Scalar :: Util).

Чего мне не хватает?

Спасибо.

-E

1 Ответ

2 голосов
/ 09 марта 2019

Я не знаю, что еще вам может понадобиться, но это работает для начинающих

СFH.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.

...