Во-первых, это фол.
Тем не менее, я также удивлен, что это работает. Я бы предположил, что ++$#array
получил бы ошибку «Не могу изменить константу», которую вы получаете при попытке увеличить число. (Не то, чтобы я случайно делал это, конечно.) Но, я думаю, именно в этом мы и ошибались: $#array
не является константой (число); это переменное выражение. Таким образом, вы можете связываться с этим. Учтите следующее:
my @array = qw/1 2 3/;
++$#array;
$array[$#array] = qw/4/;
print "@array\n"
И даже, для дополнительного удовольствия, это:
my @array = qw/1 2 3/;
$#array += 5;
foreach my $wtf (@array) {
if (defined $wtf) {
print "$wtf\n";
}
else {
print "undef\n";
}
}
И, да, Поваренная книга Perl с удовольствием возится с $#array
, чтобы увеличивать или урезать массивы (Глава 4, рецепт 3). Я до сих пор нахожу это уродливым, но, может быть, это только длительное предубеждение "но это число".