perl - 在 moose 中定义文件句柄属性

标签 perl moose filehandle

我正在尝试使用 moose 在 Perl 代码中定义文件句柄属性,如下所示:

has validation_log_file_handler => (
   is => 'ro', isa => 'File',  builder => '_build_validation_log_file_handler'
);

builder :

sub _build_validation_log_file_handler {
   my ($self) = @_;
   open(my $fh, ">", $self->validation_log_file)
      or die ("ERROR:Can't open file "
         . $self->validation_log_file
         . " for writing");
   return $fh;
}

但是当尝试写入文件时:

sub run {
    my ($self) = @_;
    print $self->validation_log_file_handler "Hello\n";
    .
    .
    .
}

我是穆斯的新人。难道我做错了什么?我收到以下编译错误:

syntax error. String found where operator expected

最佳答案

打印到复杂的文件句柄需要花括号:

print { $self->validation_log_file_handler } "Hello\n";

或者你可以使用 OO 表示法

use IO::Handle;  # Required in older versions of Perl

$self->validation_log_file_handler->print("Hello\n");

您是否定义了 File 类?如果没有,请使用IO::Handle作为isa

关于perl - 在 moose 中定义文件句柄属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25261040/

相关文章:

perl - 如何在 Perl 中同时捕获 stderr、stdout 和退出代码?

perl - Moose - 在第二个属性中保留一个属性的原始值

ruby - Ruby 在哪里跟踪其打开的文件描述符?

perl - 如何写入存储在数组中的 Perl 文件句柄?

perl - 如何在 perl 脚本中包含 BEGIN 部​​分

perl - 使用Perl DBI从表中获取一行一行和一列的数据

Perl:集成时 Net/Braintree HTTP 模块的服务器错误

perl - 如何在 Moose 强制中访问对象的属性?

Perl Moose 父类与子类一起转换

iphone - 文件句柄选项未出现