shift auf array

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
Marten Lehmann [ Do, 20 April 2006 18:39 ] [ ID #1284146 ]

Re: shift auf array

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:

[at] test = ("eins", "zwei", "drei");
print shift [at] test;

Wie kann ich das lösen?
Marten Lehmann [ Do, 20 April 2006 18:40 ] [ ID #1284147 ]

Re: shift auf array

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
Wolf Behrenhoff [ Do, 20 April 2006 18:55 ] [ ID #1284148 ]

Re: shift auf array

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

Aha, danke!
Marten Lehmann [ Do, 20 April 2006 18:59 ] [ ID #1284149 ]

Re: shift auf array

* 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
Christian Lackas [ Do, 20 April 2006 18:55 ] [ ID #1284150 ]
Perl » de.comp.lang.perl.misc » shift auf array

Vorheriges Thema: Benötige Hilfe beim Entschlüsseln einer Bedingung
Nächstes Thema: Win32 DLL's und Resourcen