Perl 如何在foreach循环中访问超出其作用域的局部变量?
我有两个字符串数据类型的数组,我正在比较使用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++; } }
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