从Perl脚本中使用变量执行Perl脚本

时间:2013-12-10 15:28:25

标签: perl

我相信我有这样的正确。我可以打印变量没问题。将vriables传递给ups检查脚本时没有发生任何事情?

#!/usr/bin/perl
open FILE, "upslist.txt";

while ($line=<FILE>){
if ($line=~/^(.*?),(.*?)$/){
#print "ups:$1 string:$2\n";
do 'check_snmp_mgeups-0.1.pl -H $1 -C $2';
}        
}         

upslist.txt

#ups
ups1.site,upsstring1
ups2.site,upsstring1
ups3.site,upsstring2
ups4.site,upsstring3

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

你在这里使用单引号,这会禁止插值:

do 'check_snmp_mgeups-0.1.pl -H $1 -C $2';

此外,您可能希望在此使用system,而不是do

system( "check_snmp_mgeups-0.1.pl", "-H", $1, "-C", $2 ) == 0 
   or die "system call to check_snmp_mgeups-0.1.pl failed: $?";

(已编辑使用system的列表表单,or而不是||。我的C ++正在展示。)

答案 1 :(得分:0)

您可以使用local的{​​{1}}副本执行此操作:

@ARGV

但如果您正在认真尝试将while ($line=<FILE>){ if ($line=~/^(.*?),(.*?)$/){ #print "ups:$1 string:$2\n"; local @ARGV = ("-H", $1, "-C", $2); do 'check_snmp_mgeups-0.1.pl'; } } 脚本中的某些功能集成到主脚本中,请考虑将check_snmp_mgeups-0.1.pl重新设计为可重复使用的模块,您可以将其导入脚本并访问通过子程序调用而不是笨重的check_snmp_mgeups-0.1.pl机制来实现功能。

答案 2 :(得分:0)

你可能在这里混合引号。你需要使用`而不是':

#!/usr/bin/perl
open FILE, "upslist.txt";

while ($line=<FILE>){
    if ($line=~/^(.*?),(.*?)$/){
        #print "ups:$1 string:$2\n";
        my $result = `check_snmp_mgeups-0.1.pl -H $1 -C $2`;
    }        
}