#!/usr/bin/perl -w
@success = qw(client1 client2 client3 client9);
print "the success array is @success\n";
@arr = qw(client3 client9);
$asize = scalar(@arr);
$absize = scalar(@success);
@using = qw(client2);
print "\n @using \n";
$usize = @using;
print "\n $asize $absize \n";
for ( $i = 0 ; $i < $asize ; $i++ ) {
for ( $j = 0 ; $j < $absize ; $j++ ) {
if ( $arr[$i] eq $success[$j] ) {
print " \n $i $j ";
print " before $arr[$i] our choice\n";
check( $arr[$i] );
print "after check our choice \n";
}
}
} ###end of t
sub check {
print "################ checking client status $_[0] ###################### ";
print "inside function call \n\n\n";
our $sc = $_[0];
for ( $j = 0 ; $j < $usize ; $j++ ) {
if ( $sc eq $using[$j] ) {
print "$sc is in use pls dont use \n";
###should we move to some file";
}
else {
if ( $j eq $usize - 1 ) {
print " reboot client\n";
print "before reboot\n";
}
}
}
}
嗨
我试图检查“arr”数组的内容是否在“success”数组中,如果它是真的我正在检查该元素是否存在于“using”数组中。但是如果输入客户端是“arr”数组中的client3和client9,那么它将进行无限循环。
提前谢谢
答案 0 :(得分:10)
问题在于:您正在使用全局变量。 $j
在sub check
的主循环AND中使用,导致混乱。
快速解决方法是将for-loops
中的一个更改为使用my
:
# in sub check:
for ( my $j = 0 ; $j < $usize ; $j++ ) {
正确的做法是:
始终use strict
,use warnings
并在脚本中的所有变量声明之前使用my
#!/usr/bin/perl
use strict;
use warnings;
my @success = qw(client1 client2 client3 client9);
...
for ( my $i = 0 ; $i < $asize ; $i++ ) {
...
这是discussed before here on SO。另请阅读perlintro on variable scoping(实际阅读整个页面)