2010-03-25 100 views
4

我是Perl新手。我已经使用以下来自一个论坛的代码连接到一台服务器。但抛出错误信息当我运行我的Perl脚本时,为什么会得到'use:command not found'?

[[email protected]]# cat tt.pl 
#!/usr/bin/perl 
use Net::Telnet; 
$telnet = new Net::Telnet (Timeout=>2, Errmode=>'die'); 
$telnet->open('10.0.0.28'); 
$telnet->waitfor('/login:/'); 
$telnet->print('administrator'); 
$telnet->waitfor('/Password:/'); 
$telnet->print('test'); 
$telnet->waitfor('/switch8-12>/'); 
$telnet->print('whoamI'); 
$output=$telnet->waitfor('/switch8-12>/'); 
print $output; 

但抛出以下错误信息。

[[email protected]]# ./tt.pl 
./tt.pl: line 3: use: command not found 
./tt.pl: line 4: syntax error near unexpected token `(' 
./tt.pl: line 4: `$telnet = new Net::Telnet (Timeout=>2, Errmode=>'die');' 
+0

您正在使用哪个外壳? – 2010-03-25 16:10:20

+4

这些是shell错误,而不是Perl错误。你能告诉我们你正在使用哪种设置吗? – 2010-03-25 16:33:39

+2

奇怪的是,错误消息行号是从你的代码行关闭的。 – toolic 2010-03-25 16:36:22

回答

11

我的猜测是,你正在使用UNIX的一个奇怪的味道,不尊重#!线,并试图通过壳,而不是通过Perl来运行该脚本。

这可能发生的另一个原因是如果tt.pl以空行开始。 #!必须出现在文件的开头。

尝试运行perl tt.pl,看看会发生什么。

+0

即使这也是抛出相同的错误信息 – user301133 2010-03-25 16:10:07

+0

“perl -v”显示什么?是否有可能在你的路径上有一些名为“perl”的东西,这实际上不是Perl解释器? (我承认这是一个长镜头的位。) – 2010-03-25 16:39:03

1

我没有看到这些线在你的脚本的顶部,这是所有的Perl模块和脚本必不可少

use strict; 
use warnings; 

你没有说这是在运行的环境 - 你在Linux上使用bash吗?不管你使用的是什么shell都不理解shebang(#!/usr/bin/perl),并且试图用它自己的语言来执行脚本,而不是调用Perl来运行它。

尝试使用/ bin/bash,然后您的shebang行将工作。或者,只需明确调用perl:perl tt.pl

+0

即使在添加这些行后获得错误信息 – user301133 2010-03-25 16:28:57

+0

[root @ CusCent5U2-64CX gannu]#perl tt.pl 无法在@INC中找到Net/Telnet.pm(@ INC包含:/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.7/x86_64-linux-thread-multi/usr/lib64/perl5/site_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8/usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5/usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8。 8/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.7/x86_64-linux-thread-multi – user301133 2010-03-25 16:29:59

+0

/usr/lib64/perl5/vendor_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8。7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5/usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-多/usr/lib/perl5/5.8.8。)在tt.pl第5行。 BEGIN失败 - 编译在tt.pl第5行中止。 [root @ CusCent5U2-64CX gannu]#./tt.pl ./tt.pl:line 3:use:command not found ./tt.pl:line 4:use:command not found ./tt.pl:line 5:use:command not found – user301133 2010-03-25 16:30:42

4

我有类似的错误消息,发现原因是perl文件使用错误的字符编码(不要问我为什么这很重要perl)。 Perl正确安装,路径是按顺序的,脚本语法是完美的(我甚至在一行“Hello World!”脚本中找到了“use:command not found”错误)。检查tt.pl是否为UTF8 no-BOM。

+0

是的,如果您使用工具(例如Windows记事本)保存,则可以添加BOM标记字节。打乱了#!,但不可见。 – 2010-03-26 13:36:26

+0

男人,当时花了我一个下午的好时间,因为大多数文本编辑当然会自动“正确地”解释和显示字符编码。 – Timo 2010-03-26 19:50:57

3

正如一条评论所述:“它看起来像一开始就有一个CR”。
如果你在这里绝望...
然后运行d2u script.pl

d2u - > DOS到UNIX。

0

同样的情况,万一要是/usr/bin/perl文件是空

0

我有同样的问题,发现有在#没有perl的!在/ usr/bin中/ perl的。 perl -v或/ usr/bin/perl -v都不起作用。

我也对Perl查找/ -name然后添加符号链接从/ usr/bin中的真实位置

的perl -v -bash:perl的:没有找到命令 在/ usr/bin中/ perl的-v -bash:在/ usr/bin中/ perl的:没有这样的文件或目录

查找/ -name perl的 的/ opt/ISS /斌/的perl5/perl的 的/ opt/ISS /斌/ perl的

ln -s/opt/ISS/bin/perl/usr/bin/perl perl -v

这是Perl 5中,版本14,颠覆1(v5.14.1)建为x86_64的Linux的

版权所有1987至2011年,拉里墙

的Perl可以仅根据任一条款的复制艺术执照或 GNU通用公共许可证,可以在Perl 5源代码包中找到。

本系统使用“man perl”或“perldoc perl”在 上找到Perl的完整文档,包括FAQ列表。如果您有权访问 Internet,请将您的浏览器指向http://www.perl.org/(Perl主页)。

在/ usr/bin中/ perl的-v

这是Perl 5中,14版,颠覆1(v5.14.1)建为x86_64的Linux的

版权所有1987-2010,Larry Wall的

只能根据Perl 5源代码包中的艺术许可证或GNU通用公共许可证的条款复制Perl。

本系统使用“man perl”或“perldoc perl”在 上找到Perl的完整文档,包括FAQ列表。如果您有权访问 Internet,请将您的浏览器指向http://www.perl.org/(Perl主页)。

相关问题