如何在Perl中使用类属性/变量作为打印文件句柄?

Jes*_*pin 5 syntax perl class file-writing

我想做同样的事情

open MYFILE, ">", "data.txt";
print MYFILE "Bob\n";
Run Code Online (Sandbox Code Playgroud)

而是在类变量中

sub _init_tmp_db
{
    my ($self) = @_;

    open $$self{tmp_db_fh}, ">", "data.txt";
    print $$self{tmp_db_fh} "Bob\n";
}
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:'字符串找到了运营商预期的附近"Bob \n"'

我该怎么办?

Eug*_*ash 6

打印手册页:

如果您将句柄存储在数组或散列中,或者通常在您使用任何比裸字句柄更复杂的表达式或者用于检索它的普通的,未取消的标量变量时,您将必须使用一个块来返回文件句柄值代替.

你应该使用:

print { $$self{tmp_db_fh} } "Bob\n";
Run Code Online (Sandbox Code Playgroud)

此代码不起作用use strict.要修复它,只需使用my变量:

open my $fh, ">", "data.txt" or die $!;
$$self{tmp_db_fh} = $fh;
print { $$self{tmp_db_fh} } "Bob\n";
Run Code Online (Sandbox Code Playgroud)