perl <file.pl> 被执行,完全没有输出

perl <file.pl> gets executed with no output at all

我下载了一个用于生成语言模型的 perl 脚本 (http://www.speech.cs.cmu.edu/tools/download/quick_lm.pl)。

当我执行 perl quick_lm.pl 时,它就会终止。完全没有输出。

我什至尝试使用 chmod 777 quick_lm.pl 授予 quick_lm.pl 所有权限。现在,当我执行 ./quick_lm.pl 时,它给出了一个错误:

-bash: ./quick_lm.pl: /usr/local/bin/perl: bad interpreter: No such file or directory

我搜索了这个错误,几乎所有的解决方案都指向 windows CLRF,但与它们不同的是,我在 /usr/local/bin/perl 中没有 ^M。另外,perl quick_lm.pl 应该还可以吧?


[bash.log]

someone@something:~/dictionary$ perl quick_lm.pl
someone@something:~/dictionary$ perl quick_lm.pl -s words.txt 
someone@something:~/dictionary$ nano quick_lm.pl 
someone@something:~/dictionary$ perl quick_lm.pl -s words.txt 
someone@something:~/dictionary$ chmod 777 quick_lm.pl 
someone@something:~/dictionary$ ./quick_lm.pl 
-bash: ./quick_lm.pl: /usr/local/bin/perl: bad interpreter: No such file or directory
someone@something:~/dictionary$ cat new.pl 
#!/usr/bin/perl -w 
use strict;

print "Hello World\n";
someone@something:~/dictionary$ perl new.pl 
Hello World
someone@something:~/dictionary$ 

[在 quick_lm.pl 的开头添加 print 并将其减少到最小的、可运行的问题演示之后。]

#!/usr/local/bin/perl -w
=POD

...license...

=END

use Getopt::Std;

print "hello world";
$VERBOSE = 1;

sub handler { local($sig) = @_;
          print STDERR "quick_lm caught a SIG$sig -- dying\n";

          exit(0);
        }
foreach (qw(XCPU KILL TERM STOP)) { $SIG{$_} = \&handler; }

这不是完整的脚本,完整的脚本在第一行提到的 link 中。我不确定它是否与我的 perl 配置一样与文件相关。你可能已经猜到了,我对 perl 了解不多。

非常感谢您抽出时间提供帮助:)

-bash: ./quick_lm.pl: /usr/local/bin/perl: bad interpreter: No such file or directory

/usr/local/bin/perl 替换为 perl 的正确路径。这个路径可以从

perl -le'print $^X'

it simply terminates. No output at all.

=pod 指令指示内联文档的开始 ("POD")。 =cut 标记 POD 块的结束。

程序错误地使用=END而不是=cut来标记POD块的结束,因此Perl认为整个程序是一个大注释..将=END替换为=cut.