7

请先看下面的代码。

#! /usr/bin/perl
package foo;

sub new {

    my $pkg = shift;
    my $self = {};
    my $self->{_fd} = undef;
    bless $self, $pkg;

    return $self;
}

sub Setfd {

    my $self = shift;
    my $fd = shift;
    $self_->{_fd} = $fd;
}

sub write {

    my $self = shift;
    print $self->{_fd} "hello word";
}

my $foo = new foo;

我的意图是使用哈希将文件句柄存储在一个类中。文件句柄一开始是未定义的,但可以通过调用 Setfd 函数来初始化。然后可以调用 write 将字符串“hello word”实际写入文件句柄指示的文件,假设文件句柄是成功“写入”打开的结果。

但是,perl 编译器只是抱怨“打印”行中有语法错误。你们中的任何人都可以告诉我这里有什么问题吗?提前致谢。

4

2 回答 2

15

您需要将$self->{_fd}表达式放在块中或将其分配给更简单的表达式:

    print { $self->{_fd} } "hello word";

    my $fd = $self->{_fd};
    print $fd "hello word";

来自perldoc -f print

请注意,如果您将 FILEHANDLE 存储在数组中,或者如果您使用任何其他比标量变量更复杂的表达式来检索它,则必须使用返回文件句柄值的块来代替:

print { $files[$i] } "stuff\n";
print { $OK ? STDOUT : STDERR } "stuff\n";
于 2010-06-12T05:41:29.857 回答
7

交替:

use IO::Handle;

# ... later ...

$self->{_fd}->print('hello world');
于 2010-06-12T16:16:38.020 回答