首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Perl -文件读取-获得"GLOB“

Perl -文件读取-获得"GLOB“
EN

Stack Overflow用户
提问于 2019-07-09 18:08:52
回答 1查看 478关注 0票数 0

我正在尝试读取一个简单的文本文件。在尝试将整个文件读入数组或只将第一行读入变量后,当我尝试使用该文件并打印值read文本时,将得到以下结果:

代码语言:javascript
复制
GLOB(0x1234567)

我试着读了整个文件:

代码语言:javascript
复制
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

或逐行读取文件:

代码语言:javascript
复制
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脚本,其中只包含上面提到的行,那么文件读取就可以了。

谢谢你抽出时间!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-09 18:37:47

最可能的原因是你忘记了< >

代码语言:javascript
复制
my $line = $fh;   # wrong
my @lines = $fh;  # wrong

更好的是:

代码语言:javascript
复制
my $line = <$fh>;   # reads a line
my @lines = <$fh>;  # reads all lines

或者,您可能做了以下工作之一:

代码语言:javascript
复制
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

最佳解决方案:

代码语言:javascript
复制
my $line = readline $fh;
my @lines = readline $fh;

我最喜欢最后一个版本,因为

  1. readline没有像< >那样在语法上重载,所以代码是明确的。
  2. readline告诉您它所做的事情:它读取一行(或一行列表)。
  3. 很难不小心漏掉。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56958387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档