0

我尝试在 perl 中使用 Tie::File 通过编写一小段代码来访问文件。但是,我通过运行下面的代码得到的“T_array”似乎是空的:

#!/usr/bin/perl -w 
use strict;
use warnings;
use Tie::File;


my @T_array;
my $input3_file_name="/test/QtermsSorted.txt";##"newQurls";
tie @T_array, 'Tie::File', $input3_file_name|| die "Could not open $input3_file_name\n";
my $len=scalar(@T_array);
print "$len\n";
##print "$T_array[0]";
##untie @T_array;

它的输出为 0,表示数组为空。“QtermsSorted.txt”是Linux下perl生成的。首先,我虽然可能是文件编码问题,但我尝试使用“iconv -t utf8 QtermsSorted.txt”来更改编码,但没有奏效。但是,当我使用在 Windows 8 中创建的 txt 文件时,输出大小是正确的。我想知道你是否可以告诉我出了什么问题以及如何解决它。先感谢您。

4

1 回答 1

2

TL;DR:始终使用or die ...

我看到的一件事是你|| die ...永远不会开火。这是一个优先级问题。被执行的是

tie @T_array, 'Tie::File', ($input3_file_name|| die "Could not open $input3_file_name\n");

你的意思是

tie( @T_array, 'Tie::File', $input3_file_name )|| die "Could not open $input3_file_name\n";

如果你改变||或者or你会得到你想要的结果。此外,您应该添加$!到错误字符串中,以便您可以看到错误。

tie @T_array, 'Tie::File', $input3_file_name or die "Could not open $input3_file_name: $!\n";

希望你能得到一些关于为什么平局失败的原因。

于 2013-11-14T02:13:32.227 回答