shift auf array

shift auf array

am 20.04.2006 18:39:12 von Marten Lehmann

Hi,

ich möchte aus einem Array, was von einer Funktion zurückgeliefert wird
ohne Umwege den ersten Eintrag erhalten. Ich dachte mir das so:

sub getArray {
return ("eins", "zwei", "drei");
}

$erstes = shift getArray();

Geht aber nicht:


Tschüß
Marten

Re: shift auf array

am 20.04.2006 18:40:28 von Marten Lehmann

Die Nachricht ging zu früh raus.

Die Fehlermeldung ist:

Type of arg 1 to shift must be array (not subroutine entry) at ./test.pl
line 12, near ");"

Folgendes geht aber ohne Probleme:

@test = ("eins", "zwei", "drei");
print shift @test;

Wie kann ich das lösen?

Re: shift auf array

am 20.04.2006 18:55:00 von Wolf Behrenhoff

Marten Lehmann schrieb:
> Hi,
>
> ich möchte aus einem Array, was von einer Funktion zurückgeliefert wird
> ohne Umwege den ersten Eintrag erhalten. Ich dachte mir das so:
>
> sub getArray {
> return ("eins", "zwei", "drei");
> }
>
> $erstes = shift getArray();
>
> Geht aber nicht:

Natürlich nicht, denn shift liefert ja nicht nur ein Element zurück,
sondern ist für Veränderung eines Arrays gedacht (das erste Element wird
gelöscht und sozusagen nur als Nebeneffekt zurückgeliefert). Du möchtest
aber gar nicht löschen.

Daher:

$erstes = (getArray())[0];

Wolf

Re: shift auf array

am 20.04.2006 18:55:33 von Christian Lackas

* Marten Lehmann [2006-04-20]:

Hallo Marten,

> ich möchte aus einem Array, was von einer Funktion zurückgeliefert wird
> ohne Umwege den ersten Eintrag erhalten. Ich dachte mir das so:
> sub getArray {
> return ("eins", "zwei", "drei");
> }
> $erstes = shift getArray();
> Geht aber nicht:

weil shift ja sein Argument auch noch verändert (nämlich das erste
Element entfernt). Du gibst ihm hier aber eine Liste, wo das nicht
geht.
Der Unterschied zwischem einem Array und einer Liste wird in der perlfaq
besprochen:

Found in /usr/local/lib/perl5/5.8.8/pod/perlfaq4.pod
What is the difference between a list and an array?


Dein Problem wird hier sehr häufig besprochen, Standardlösungen sind
z.B.

my ($erstes) = getArray();

my $erstes = (getArray())[0];

Im Archiv (siehe FAQ) findest du noch weitere Beispiele mit Diskussion
der Vor- und Nachteile:

http://www.worldmusic.de/perl/


Gruß
Christian

--
Guter Stadtrat ist teuer (Poesiealbum der Mafia).
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker

Re: shift auf array

am 20.04.2006 18:59:53 von Marten Lehmann

> Daher:
>
> $erstes = (getArray())[0];

Aha, danke!