我尝试在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文件时,输出大小是正确的。我想知道你是否可以告诉我什么是错的以及如何解决它。提前谢谢。
答案 0 :(得分: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";
希望你能得到一些关于为什么领带失败的理由。