我在Perl中有一个散列哈希值哈希,名为data
,带有第一级密钥:F,NF和S(基本上是%data={'F' => ..., 'NF' => ..., 'S' => ...}
)
在我的代码的开头,我打开3个输出句柄:
open (my $fh1, ">>", $filename1) or die "cannot open > $filename1: $!";
open (my $fh2, ">>", $filename2) or die "cannot open > $filename2: $!";
open (my $fh3, ">>", $filename3) or die "cannot open > $filename3: $!";
然后,当我的代码运行时,它会填充哈希散列的散列,最后,我想打印每个键的散列散列哈希值' F',' NF'和' S'到一个单独的文件(由我在开头定义的三个文件句柄标识。)我不确定如何做到这一点。我尝试了以下内容:在我打印哈希的foreach
循环之前,我已经定义了
my @file_handles=($fh1, $fh2, $fh3);
my $handle_index=0;
在散列的每次迭代中,我使用
写入文件print $file_handles[$handle_index] "$stuff\n";
然而,当我尝试运行代码时,它会告诉我string found where operator expected
我的理解是,我没有正确地告诉他应该使用哪个文件句柄。有什么建议吗?
答案 0 :(得分:1)
除了文件句柄的简单标量或单词之外,还必须将文件句柄包装在大括号中:
print { $file_handles[$handle_index] } "stuff to print";
请注意文件句柄部分后面仍然没有逗号。
答案 1 :(得分:0)
我似乎能够通过使用存储在数组中的文件句柄来复制您的问题。也许这是不可能的,虽然我可以发誓我曾经见过它。
>perl -lwe"open $x, '>', 'a.txt' or die $!; @x = ($x); print $x[0] 'asd';"
String found where operator expected at -e line 1, near "] 'asd'"
(Missing operator before 'asd'?)
syntax error at -e line 1, near "] 'asd'"
Execution of -e aborted due to compilation errors.
使用哈希也是如此。可能的解决方法是:
您可以跳过间接对象表示法并使用:
$file_handles[$index]->print("$stuff\n")
或者您可以使用Perl样式的循环来打印:
for my $fh (@file_handles) {
print $fh "$stuff\n";
}
间接对象表示法是指在函数调用之前放置对象(在您的情况下为文件句柄),如下所示:
my $obj = new Module;
而不是传统的:
my $obj = Module->new;
中间接对象表示法的更多信息