我下载了一个用于生成语言模型的perl脚本(http://www.speech.cs.cmu.edu/tools/download/quick_lm.pl)。
当我perl quick_lm.pl
时,它就会终止。完全没有输出。
是的,我安装了perl,perl -v
完美无缺。
我制作了一个简单的hello-world perl脚本,它执行得很好。 [附在最后]
因此,我在print "hello";
的第一行包含quick_lm.pl
并尝试了perl quick_lm.pl
,但仍未发生任何事情。
我甚至尝试使用quick_lm.pl
提供chmod 777 quick_lm.pl
所有权限。现在当我./quick_lm.pl
时,它会出错:
-bash: ./quick_lm.pl: /usr/local/bin/perl: bad interpreter: No such file or directory
我搜索了这个错误,几乎所有解决方案都指向了Windows CLRF,但与它们不同的是,^M
中没有/usr/local/bin/perl
。此外,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$
[在print
的开头添加quick_lm.pl
并将其缩小为问题的最小可运行演示。]
#!/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; }
这不是完整的脚本,完整脚本位于第一行中提到的链接中。我不确定它是否与我的perl配置文件相关。你可能已经猜到了,我对perl一点都不了解。
感谢您的时间和帮助:)。
答案 0 :(得分:2)
-bash: ./quick_lm.pl: /usr/local/bin/perl: bad interpreter: No such file or directory
将/usr/local/bin/perl
替换为perl
的正确路径。该路径可以从
perl -le'print $^X'
它只是终止。完全没有输出。
=pod
指令表示内联文档的开头(“POD”)。 =cut
标志着POD块的结束。
程序错误地使用=END
代替=cut
来标记POD块的结尾,因此Perl认为整个程序是一个大评论。将=END
替换为{{ 1}}。