Schrift
[thread]8594[/thread]

funktions rückgabe



<< >> 5 Einträge, 1 Seite
PerlProfi
 2006-12-18 21:59
#72618 #72618
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Folgendes Beispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl
use strict;
use warnings 'all';

sub func { return @_ }

print "FUNC(9): ". func(9) ."\n";

Ich hatte jetzt erwartet, dass mir 9 ausgegeben wird, allerdings bekomme ich eine 1!

Ich habe es dann mit 2 übergebenen Elementen versucht, und bekomme eine 2. Daraus schließe ich, dass mir die Anzahl der zurückgelieferten Elemente ausgegeben wird.

Nun möchte ich aber nicht die Anzahl haben, sondern wirklich die Elemente, gibt es eine Lösung ohne die Funktion zu verändern, oder das Ergebnis vorher in einer Variablen zu speichern??

MfG PerlProfi
Ronnie
 2006-12-18 22:12
#72619 #72619
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
-- snipp -- (sorry, lief so nicht)

EDIT: aber so:
Code: (dl )
print "FUNC(9): @{[func(9)]} \n";
\n\n

<!--EDIT|Ronnie|1166472913-->
murphy
 2006-12-18 22:15
#72620 #72620
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Das Problem ist, dass deine Funktion eine Liste zurückgibt, Du den Rückgabewert aber im Skalarkontext verwendest. Mit print "FUNC(9): ", func(9), "\n"; solltest Du eigentlich den gewünschten Effekt erreichen.
When C++ is your hammer, every problem looks like your thumb.
betterworld
 2006-12-18 22:30
#72621 #72621
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=murphy,18.12.2006, 21:15]Das Problem ist, dass deine Funktion eine Liste zurückgibt, Du den Rückgabewert aber im Skalarkontext verwendest. Mit print "FUNC(9): ", func(9), "\n"; solltest Du eigentlich den gewünschten Effekt erreichen.[/quote]
Es wird eben keine Liste zurueckgegeben, sondern ein Skalar. Ein Array (Array ist nicht dasselbe wie Liste) im skalaren Kontext ist die Anzahl seiner Argumente.

Andere Möglichkeiten wären:
Code: (dl )
1
2
3
4
5
return $_[0];

# oder

return wantarray ? @_ : $_[0];
PerlProfi
 2006-12-19 14:32
#72622 #72622
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
@murphy danke, nach sowas hab ich gesucht, war irgendwie leichter als ich dachte, vorher hatte ich auch mal @{[func(9)]}, aber es war mir zu hässlich, dann habe ich nach einer funktion wie scalar() gesucht, nur eben für listenkontext, habe aber nichts gefunden.
Dabei hab ich ganz vergessen, dass ich ja an Funktionen eine Liste übergebe... hab mir das mit . einfach angewöhnt, wenn ich strings brauche.

MfG PerlProfi
<< >> 5 Einträge, 1 Seite



View all threads created 2006-12-18 21:59.