my ($nr) = @_;
Was zum Teufel ist @_ ?
(Ich weiss was @_ ist, aber es ist wohl schlechter Code)
Das ganze Mißverständniss beginnt hier.
Das ist kein schlechter Code sondern durchaus üblich, auch wenn in der Liste auf der Linken Seite nur ein Element steht, kann man das aus Gründen der Konsistenz so machen.
my($parameter_1, $parameter_2) = @_;
my ($nr) = @_;
ist das gleiche wie
my $nr = $_[0];
oder wie:
my $nr = shift;
jeder so wie er mag. shift ist zwar langsamer, das dürfte aber meistens keine Rolle spielen.
if (@$_[0] == $nr)
Hier greifst du auf das erste Element in @_ zu,
und das ist falsch!
Hier versucht er auf das erste Element in @$_ zuzugreifen.
test(qw(a b c));
sub test
{
printf "@$_[0]\n"; # Use of uninitialized value in join or string ...
$_ = [qw(a b c)];
print "@$_[0]"; # a
}
Ich gewinne den Eindruck dass du nicht weisst, was $_[0] ist.
Es ist das erste Element in @_ und somit das gleiche wie $nr
Das ist richtig (auch wenn Kurt das bestreitet).
Struppi.