Просто хотите узнать, почему @b действует как глобальный и должен сбрасываться каждый раз при вызове подпрограммы.My (переменная) не должна длиться после процедуры, но она постоянна.Первая итерация работает, но последующие будут повреждены, если для цикла for не задано значение 0.
Кроме того, @b не отвечает на a;Печать Присоединиться ();@ Ь = (0) х @ $ а;отображение;или любые другие вызовы, ничего кроме прямого запроса $ b (#) и ничего больше.Разве не может быть трещина в доспехах Perl, не так ли?
Да, если я закомментирую 1-ю итерацию и цикл for, 2-я итерация работает, но последующие - нет.
sub firstDupe {
my ($a) = @_;
my @b;
# need for next line inexplicable, @b acts like global, ideas?
my $l = scalar(@{$a})+1; for ($i=0; $i < $l; $i++){ $b{$i}='0'; }
for (@{$a}){
return int($_) if $b{$_}++;
}
return -1;
}
my @pb= (2, 1, 3, 5, 3, 2);
$val=&firstDupe(\@pb);
my $ret="\nRet: $val";
@pb= (2, 4, 3, 5, 1);
$val=&firstDupe(\@pb);
$ret = $ret.", $val";
@pb= (1);
$val=&firstDupe(\@pb);
$ret = $ret.", $val";
@pb= (2,2);
$val=&firstDupe(\@pb);
$ret = $ret.", $val";
@pb= (2,1);
$val=&firstDupe(\@pb);
$ret = $ret.", $val";
print "\n\n$ret";
print "\nkey: 3, -1, -1, 2, -1\n";