Как я могу сохранить и получить доступ к дескриптору файла в классе Perl?

посмотрите на следующий код сначала.

#! /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;

Мое намерение состоит в том, чтобы сохранить дескриптор файла в классе с помощью хеша. дескриптор файла не определен сначала, но может быть initilized впоследствии путем вызывания функции Setfd. затем запись можно назвать для фактической записи строки "привет, слово" в файл, обозначенный дескриптором файла, предположило, что дескриптор файла является результатом успеха открытая "запись".

но, компилятор жемчуга просто жалуется, что существует синтаксическая ошибка в строке "печати". может кто-либо из Вас говоришь мне что случилось здесь?заранее спасибо.

7
задан Zaid 12 June 2010 в 11:55
поделиться

2 ответа

Вам нужно поместить выражение $self->{_fd} в блок или присвоить его более простому выражению:

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

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

Из perldoc -f print:

Обратите внимание, что если вы храните FILEHANDLE в массиве, или если вы используете любое другое выражение, более сложное, чем скалярная переменная, для его получения, вам придется использовать блок, возвращающий значение filehandle вместо этого:

print { $files[$i] } "stuff\n";
print { $OK ? STDOUT : STDERR } "stuff\n";
15
ответ дан 6 December 2019 в 08:14
поделиться

Альтернативно:

use IO::Handle;

# ... later ...

$self->{_fd}->print('hello world');
7
ответ дан 6 December 2019 в 08:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: