У меня есть следующий код Perl.Я не могу понять следующий код Perl
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
my @array = ( 3, 4, 1, 4, 7, 7, 4, 1, 3, 8);
my %unordered;
@unordered{@array} = undef;
foreach my $key (keys %unordered) {
print "Unordered: $key\n";
}
my %seen;
my @ordered;
foreach my $element (@array) {
if ( not $seen{$element}++) {
push @ordered, $element;
}
}
В последнем foreach
блоке кода, я не могу понять это - в первой итерации выражение not $seen{$element}++
оценки не 0 - правда - так, если блок выполнения. Во второй итерации выражение not $seen{$element}++
должно снова оценить не 0 - true, поскольку хеш пуст. Итак, чтение скаляра $seen{$element}
будет читать 0, а не 0 будет оцениваться как true. Итак, блок if должен выполнить снова. Но в книге говорится, что она прекращается после первой итерации. Может кто-нибудь объяснить это?
Что вы думаете '' ++ делает здесь? –
Хэш '% seen' имеет те же ключи, что и'% unordered', поэтому их можно использовать таким же образом, не создавая два хэша. – Borodin