perl <file.pl>执行时根本没有输出

时间:2017-07-06 14:30:28

标签: bash shell perl scripting cmusphinx

我下载了一个用于生成语言模型的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一点都不了解。

感谢您的时间和帮助:)。

1 个答案:

答案 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}}。