我正在尝试读取一个简单的文本文件。在尝试将整个文件读入数组或只将第一行读入变量后,当我尝试使用该文件并打印值read文本时,将得到以下结果:
GLOB(0x1234567)我试着读了整个文件:
open(my $fh,'<','/path/to/file.txt') or die "Can't open data";
@lines = <$fh>;
close($fh);
print @lines;
#Results in a single "GLOB(0x1234567)" line或逐行读取文件:
open(my $fh,'<','/path/to/file.txt') or die "Can't open data";
while (my $line = <$fh>) {
print $line;
#Results in a single "GLOB(0x1234567)" line
}
close($fh);该文件具有适当的权限,正确的编码( UTF-8可以吗?)
我认为这可能是一个与环境相关的问题,因为如果我创建一个完全空的Perl脚本,其中只包含上面提到的行,那么文件读取就可以了。
谢谢你抽出时间!
发布于 2019-07-09 18:37:47
最可能的原因是你忘记了< >
my $line = $fh; # wrong
my @lines = $fh; # wrong更好的是:
my $line = <$fh>; # reads a line
my @lines = <$fh>; # reads all lines或者,您可能做了以下工作之一:
my $line = <$ fh>; # parses as glob($fh), not readline($fh)
my $line = <${fh}>; # also means glob($fh)
my $line = <$handles[$i]>; # glob($handles[$i])基本上,如果您使用的是<foo>,其中foo只是一个美元符号,后面紧跟一个标识符,没有其他任何东西,那么它将被视为一个glob操作,而不是一个readline。
最佳解决方案:
my $line = readline $fh;
my @lines = readline $fh;我最喜欢最后一个版本,因为
readline没有像< >那样在语法上重载,所以代码是明确的。readline告诉您它所做的事情:它读取一行(或一行列表)。https://stackoverflow.com/questions/56958387
复制相似问题