посмотрите на следующий код сначала.
#! /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. затем запись можно назвать для фактической записи строки "привет, слово" в файл, обозначенный дескриптором файла, предположило, что дескриптор файла является результатом успеха открытая "запись".
но, компилятор жемчуга просто жалуется, что существует синтаксическая ошибка в строке "печати". может кто-либо из Вас говоришь мне что случилось здесь?заранее спасибо.
Вам нужно поместить выражение $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";
Альтернативно:
use IO::Handle;
# ... later ...
$self->{_fd}->print('hello world');