Thread Listen mit einander verbinden
(11 answers)
Opened by jan99 at 2014-04-17 17:18
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 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]' 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) |