Thread Listen mit einander verbinden (11 answers)
Opened by jan99 at 2014-04-17 17:18

Raubtier
 2014-04-18 10:01
#174846 #174846
User since
2012-05-04
1054 Artikel
BenutzerIn

user image
Naja, prinzipiell funktionieren shift und pop für Arrays und Array-Referenzen. Wenn $current_obj->node_list() eine Array-Referenz zurückgibt, funktioniert dein erster Befehl (und der zweite auch):

Code: (dl )
1
2
perl -wE'package foo;use Moose;sub foo{return [qw(d e f)]};package main;my $f=foo->new();my @x;push @x, shift $f->foo();say $x[0]'
d


Allerdings gibst node_list, wie der Name schon vermuten lässt, wohl bei dir eine Liste zurück. shift/unshift funktionieren aber nur auf Arrays (oder Array-Referenzen). pop und unshift geben nicht nur etwas zurück, sondern sie ändern ja auch ihr Argument. Das geht bei einer Liste aber nicht. (siehe auch perldoc -q 'difference between a list and an array')

Du möchtest ja einfach nur das erste oder letzte Element der Liste haben - das geht einfach mit [0] bzw. [-1].

Also:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
# anhängen
push($superway, ($current_obj->node_list())[0]);

# vorstellen
unshift($superway, ($current_obj->node_list())[-1]);

#umgedreht anhängen
push($superway, (reverse $current_obj->node_list())[0]);

#umgedreht vorstellen
unshift($superway, (reverse $current_obj->node_list())[-1]);


PS: ich persönlich bevorzuge die alte von "wer" beschriebene Schreibweise, d.h. push @$arrayref, $element, weil sie besser klarstellt, dass das erste Element für push ein Array-Ref ist.
Last edited: 2014-04-18 10:05:03 +0200 (CEST)

View full thread Listen mit einander verbinden