【问题标题】:Perl - error reading text filePerl - 读取文本文件时出错
【发布时间】:2018-04-17 18:34:09
【问题描述】:

我正在尝试用 perl 读取文件。

我只想打印文件players.txt 的每一行的名称。

我正在使用此代码:

#!/usr/local/bin/perl
open (MYFILE, 'players.txt');
while () {
    chomp;
    print "$_\n";
}
close (MYFILE);

这会产生这个错误:

./program5.pl: line 2: syntax error near unexpected token `MYFILE,'
./program5.pl: line 2: `    open (MYFILE, 'players.txt');'

我正在使用 Unix 操作系统来执行此操作。我找不到适用于在 Perl 中读取文件的指南。

【问题讨论】:

  • 您应该检查open 是否成功,并且while 循环应该从文件中读取行。就像现在的循环一样,它只是永远迭代而不读取任何内容
  • 使用open my $file, '<', 'players.txt' or die "$!:players.txt";
  • 你所展示的完全没有意义;程序的第二行很好(即使有更好的方法)并且不应该抛出语法错误。 while () 出问题了——() 中一定有什么东西。从MYFILE 文件句柄读取它是while (<MYFILE>)。然后程序应该工作。但是使用上面 Pursell 评论中的代码打开文件。
  • [can't] find a guide that works for reading in a file in Perl 你发现了什么发现?您(打算)使用什么版本/实现的 Perl?你知道Rosetta Code吗?
  • @Borodin 有趣,不知道它的意图。在我看来,允许这样的语法只是一个设计错误。一方面,我们不能说if ()for ()(不是我想要的)

标签: perl


【解决方案1】:

您遇到的错误是 bash 错误,这意味着您要求 bash 处理 Perl 代码。这是行不通的

猜测一下,您的 shebang 行 #!/usr/local/bin/perl 不会从第一行的开头开始。 #! 这两个字符必须是文件的前两个字节

如果您指定 perl 应该运行程序,您也可以删除 shebang 行:

perl program5.pl

while () 中也有错误,这是一个无限循环,不会从文件中读取。你需要

while ( <MYFILE> ) {
    ...
}

您找到了一个非常糟糕且过时的 Perl 学习建议来源。我建议你看看 Perl tag information 其中列出了许多优秀的教程和资源

【讨论】:

  • "perl myprog.pl" 工作。我不知道“#!/usr/local/bin/perl”有什么问题。那一定不是 perl 目录的正确路径。不过,至少我现在可以运行我的程序了,谢谢!
  • @Some:使用type -a perl 告诉您perl 在哪里。