perl - 如何使用 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
解决方案
我不知道您在那里可能还需要什么,但这适用于初学者
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
.
推荐阅读
- c - 无法使用 LINES 和 COLS 作为 ncurses 中的常量
- html - 如果仅添加样式,则 html 按钮焦点/轮廓的行为会有所不同,至少在 Chrome 83 中
- javascript - 如何将一组由空格分隔的参数更改为 Discord.js 中的一个参数?
- r - R Shiny“二进制运算符的非数字参数”错误
- java - Spring Boot 升级后启动慢
- latex - 与 Clisting 环境有关的是什么
- json - java - 如何检查json字符串是否包含java中的多个根元素?
- swift - 你需要在 Operation 类的 main() 方法中使用 URLSession 的 dataTask(with: URL) 吗?
- node.js - 多个 Sequelize 关联
- android - 未找到改造注释。(参数 #6),但我只有 5 个参数