2010-04-18T09:49:06
biancaHab ja dann in der nächsten Zeile $naechster ++ stehen. Dachte halt, man könnte das in einer Zeile
machen.
Kann man auch, wenn man explizit auf das erste Element der Liste zugreift.
QuoteAber wie ich das sehe, ist mein Kontext garkein skalarer Kontext sondern Liste?
Das kommt drauf an was du machst.
QuoteIch dachte immer, das ginge danach, was links zugewiesen wird.
Das ist dein Irrtum. Die nächste Verwendung des Wertes ist es, die über den Kontext entscheidet. Wenn du zu irgend etwas 1 addierst, dann übt diese Addition Skalaren Kontext auf das "irgend etwas" aus.
Wenn die unmittelbar nächste Operation keine Addition, sondern eine Zuweisung ist, dann entscheidet der Typ der linken Seite über den Kontext. Also noch mal mit Beispielen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use strict;
use warnings;
use 5.010;
sub context {
given (wantarray) {
when (undef) { say "void" };
when (0) { say "scalar" };
when (1) { say "list" };
}
1;
}
my $a = context(); # scalar
my ($b) = context(); # list
my $c = context() + 1; # scalar - wegen des + 1, nicht wegen der Zuweisung
my ($d) = context() + 1; # scalar - wegen des + 1, nicht wegen der Zuweisung
Quote Da dies in diesem Fall ein einzelner nummerischer Wert - ein String - ist dachte ich, es wäre skalar und man könnte am Ende auch einfach ein +1 hinzufügen.
Liege ich da falsch?
Du liegst falsch, weil die Addition vor der Zuweisung erfolgt, und daher die Addition den Kontext bestimmt, nicht die Zweisung.
QuoteDen Listenkontext hatte ich bei diesem Konstrukt vermutet:
my @temp = (
keys %attach
? (sort {$b <=> $a} keys %attach)
: ()
);
Hab ich das falsch rum verstanden?
Das ist tatsächlich Listenkontext