Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从带有变量的Perl脚本中执行Perl脚本_Perl - Fatal编程技术网

从带有变量的Perl脚本中执行Perl脚本

从带有变量的Perl脚本中执行Perl脚本,perl,Perl,我相信我有这种正确的想法。我可以打印变量,没问题。将VRIABLE传递给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'; } } 谢

我相信我有这种正确的想法。我可以打印变量,没问题。将VRIABLE传递给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';
}        
}         

谢谢您的帮助。

您在此处使用单引号,这将禁止插值:

do 'check_snmp_mgeups-0.1.pl -H $1 -C $2';
另外,您可能想在这里使用
系统
,而不是
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: $?";

<>(编辑使用<代码>系统> <代码>,<代码>或而不是<代码> < <代码> >我的C++显示。

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

do 'check_snmp_mgeups-0.1.pl -H $1 -C $2';
另外,您可能想在这里使用
系统
,而不是
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: $?";

<>(编辑使用<代码>系统> <代码>、<代码>或而不是< > > <代码>我的C++正在显示。

您可以用<代码>本地< /代码> <代码> @ 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';
    }
}
while($line=){
如果($line=~/^(.*),(.*)$/){
#打印“ups:$1字符串:$2\n”;
本地@ARGV=(“-H”、$1、“-C”、$2);
执行“检查\u snmp\u mgeups-0.1.pl”;
}
}

但如果您试图将一些功能从“代码”> SqpMnMgEUPS-0.1.PL < /C>脚本集成到您的主脚本中,请考虑重新设计<代码> CHECKYSNMPGMUEPS-0.1.PL < /C>作为可重用的模块,您可以将其导入到脚本中,并通过子程序调用而不是笨重的
do文件
机制访问其功能。

您可以使用
@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';
    }
}
while($line=){
如果($line=~/^(.*),(.*)$/){
#打印“ups:$1字符串:$2\n”;
本地@ARGV=(“-H”、$1、“-C”、$2);
执行“检查\u snmp\u mgeups-0.1.pl”;
}
}

但如果您试图将一些功能从“代码”> SqpMnMgEUPS-0.1.PL < /C>脚本集成到您的主脚本中,请考虑重新设计<代码> CHECKYSNMPGMUEPS-0.1.PL < /C>作为可重用的模块,您可以将其导入到脚本中,并通过子程序调用而不是笨重的
do文件
机制来访问其功能。

您可能在这里混用了引号。您需要使用“而不是”:

#!/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`;
    }        
}         
#/usr/bin/perl
打开文件“upslist.txt”;
而($line=){
如果($line=~/^(.*),(.*)$/){
#打印“ups:$1字符串:$2\n”;
my$result=`check_snmp_mgeups-0.1.pl-H$1-C$2`;
}        
}         

您可能在这里混用了引号。您需要使用“而不是”:

#!/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`;
    }        
}         
#/usr/bin/perl
打开文件“upslist.txt”;
而($line=){
如果($line=~/^(.*),(.*)$/){
#打印“ups:$1字符串:$2\n”;
my$result=`check_snmp_mgeups-0.1.pl-H$1-C$2`;
}        
}         

你能发几行
upslist.txt
吗?你能发几行
upslist.txt
吗?我不知道我这里做错了什么。我得到:检查\u snmp\u mgeups-0.1.pl的系统调用失败:-1在ups\u crunch第11行,第2行。您可能需要将完整路径放在那里
check\u snmp\u mgeups-0.1.pl
。另外,如果
check\u snmp\u mgeups-0.1pl
脚本未标记为可执行,则您可能需要
chmod+x
它。不确定我在这里做错了什么。我得到:检查\u snmp\u mgeups-0.1.pl的系统调用失败:-1在ups\u crunch第11行,第2行。您可能需要将完整路径放在那里
check\u snmp\u mgeups-0.1.pl
。另外,如果
check\u snmp\u mgeups-0.1pl
脚本未标记为可执行,则可能需要
chmod+x
将其删除。