2013-08-22 154 views
0

我的perl脚本出现了一个很奇怪的问题。我真的不知道,发生了什么,也许你会看到它......Perl打印更改执行顺序

我的脚本使用Net::SSH::Perl通过SSH连接到主机。之后,我在config.ini上搜索head -20并搜索一些模式(版本号)。

当我打印版本号i cat其他约700行长的文件。

现在发生的情况是,该脚本不是打印版本号,而是打印整个700行文件。 除非在版本打印之后直接添加print "\n"x10;

这种行为没有任何意义,我,但我敢肯定,你们中的一个会比我更聪明,知道答案:)

下面的脚本:

1 #!/usr/local/bin/perl -w 
    2 use lib './'; 
    3 use strict; 
    4 
    5 use GetVersions; 
    6 use Net::SSH::Perl; 
    7 
    8 
    9 my $ssh = Net::SSH::Perl->new(
10   'host', 
11   identity_files => ['~/.ssh/id_rsa'] 
12); 
13 
14 $ssh->login('user'); 
15 
16 my $ver_regex = '^psadm\.version\s*=\s*rel_(.+)$'; 
17 
18 my ($file, $err, $exit) = $ssh->cmd('head -20 /config.ini'); 
19 my $version = $file =~ /$ver_regex/m; 
20 print "version: $version\n", 
21 #print "\n"x10; 
22 ($file, $err, $exit) = $ssh->cmd('cat /application.ini'); 

回答

10

这应该可能是分号

print "version: $version\n", 
         ^
+0

+1不错。有趣的是额外的'print'语句实际上只是增加了一个分号来解决问题,并且可以是任何语句。它还应该在版本号的末尾添加一个'1',因为它会打印'print'的返回值。 – TLP

+0

这会在版本号之前添加打印文件内容的奇怪现象(参见'print 2,print 3')。 – AKHolland

+0

哦,非常感谢你:-D我和其他同事一起盯着这段代码几个小时,我们只是没有看到。你先生,真棒! – Vince