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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 如何在foreach循环中访问超出其作用域的局部变量?_Perl_Loops - Fatal编程技术网

Perl 如何在foreach循环中访问超出其作用域的局部变量?

Perl 如何在foreach循环中访问超出其作用域的局部变量?,perl,loops,Perl,Loops,我有两个字符串数据类型的数组,我正在比较使用foreach循环的数组,并在找到匹配项时提高计数器 my @array1 = ('India'); my @array2 = ('India', 'America'); foreach my $a (@array1) { foreach my $b (@array2) { my $count=0; if($a eq $b) { $count++; } }

我有两个字符串数据类型的数组,我正在比较使用foreach循环的数组,并在找到匹配项时提高计数器

my  @array1 = ('India');
my  @array2 = ('India', 'America');
foreach my $a (@array1) {
    foreach my $b (@array2) {
        my $count=0;  
        if($a eq $b) {
             $count++;
        }
    }
}
现在我想在它的作用域之外使用这个count变量

 if ($count > 0) { 
      call_some_function();
 }

我哪里出错了?

$count
被声明到
foreach
循环中,它不存在于该循环之外,如果您想在循环之外使用
$count
,只需将
my$count=0
放在第一个
foreach
之前,并将其删除到
foreach

以下是您想要的:

my @array1=('India');
my @array2=('India','America');
my $count=0;
foreach my $country1(@array1)
{
   foreach my $country2(@array2)
   {
        if($country1 eq $country2)
        {
             $count++;
        }

   } 
}

$count
被声明到
foreach
循环中,它不存在于该循环之外,如果要在循环之外使用
$count
,只需将
my$count=0
放在第一个
foreach
之前,并将其删除到
foreach

以下是您想要的:

my @array1=('India');
my @array2=('India','America');
my $count=0;
foreach my $country1(@array1)
{
   foreach my $country2(@array2)
   {
        if($country1 eq $country2)
        {
             $count++;
        }

   } 
}

在循环之外声明变量,在$count中也有一个输入错误:

my $count = 0;
foreach $a (@array1) {
   foreach $b (@array2) {
      if ( $a eq $b ) {
         $count++;
      }
   }
}

在循环之外声明变量,在$count中也有一个输入错误:

my $count = 0;
foreach $a (@array1) {
   foreach $b (@array2) {
      if ( $a eq $b ) {
         $count++;
      }
   }
}

我已经试过了!。。。。但是计数仍然显示为零,即使我在数组中有匹配的值。在循环中使用它们之前,您是否声明了
$a
$b
,如果不是,则在
之前为每个$a(@array1)
声明example@SIVA还有,如果,为什么要在每个
my
中使用大写字母?为什么
$
计数之间有空格?您是否使用严格的
使用警告
?您应该始终使用移动堆栈站点执行此操作,它会自动将空格后的第一个字母大写
$a
$b
作为排序使用的神奇变量。将它们用作循环迭代器不是一个好主意。单字母变量名通常都很糟糕。我已经试过了!。。。。但是计数仍然显示为零,即使我在数组中有匹配的值。在循环中使用它们之前,您是否声明了
$a
$b
,如果不是,则在
之前为每个$a(@array1)
声明example@SIVA还有,如果
,为什么要在每个
my
中使用大写字母?为什么
$
计数之间有空格?您是否使用严格的
使用警告
?您应该始终使用移动堆栈站点执行此操作,它会自动将空格后的第一个字母大写
$a
$b
作为排序使用的神奇变量。将它们用作循环迭代器不是一个好主意。单字母变量名通常都是不好的;使用警告qw(全部)在脚本的开头。另外,请复制你的真实代码(那个代码甚至没有编译);使用警告qw(全部)在脚本的开头。另外,请复制您的真实代码(该代码甚至未编译)。尝试此操作后,即使有匹配的值,计数仍为0。如果执行此操作,即使有匹配的值,计数仍为0