Stringrückgabevon &sub direkt an Variableanhängen
am 26.03.2006 20:08:54 von unknownPost removed (X-No-Archive: yes)
Post removed (X-No-Archive: yes)
Erik Braun
> Folgendes Beispiel sollte meine Fragestellung demonstrieren. Was ich will,
> ist daß die Text-Ausgabe der Unterprozedur &ausgabe, welche als eine Liste
> ($status,$text) erfolgt, wie im Beispiel direkt an die Variable $text
> angehängt wird, hier ist die $text am Ende "eins zwei" und $status=1.
> Ich würde gern auf die temporäre Variable verzichten.
Wenn alles, was Du willst, darin besteht, an die Variable $text was
anzuhängen, dann gib doch einfach der Subroutine eine Referenz auf
$text mit, dann kann das Anhängen dort drin stattfinden und Du
brauchst höchstens noch $status als Rückgabe.
Gruß,
Guido
Erik Braun wrote:
> Folgendes Beispiel sollte meine Fragestellung demonstrieren. Was ich
> will, ist daà die Text-Ausgabe der Unterprozedur &ausgabe, welche als
> eine Liste ($status,$text) erfolgt, wie im Beispiel direkt an die
> Variable $text angehängt wird, hier ist die $text am Ende "eins zwei"
> und $status=1. Ich würde gern auf die temporäre Variable verzichten.
>
> Wenn ich perlsub richtig verstanden habe, können mehrere Werte nur als
> flache Liste zurückgegeben werden oder per Referenz gesetzt werden.
> Ist es trotzdem möglich, $text_tmp zu entbehren?
>
> #!/usr/bin/perl -w
>
> my $status=0;
> my $text="eins ";
>
> ($status, $text_tmp) = &ausgabe;
> $text.=$text_tmp;
($status, substr($text, length($text))) = &ausgabe;
Schöner finde ich das aber nicht ...
hp
--
_ | Peter J. Holzer | Löschung von at.usenet.schmankerl?
|_|_) | Sysadmin WSR/LUGA |
| | | hjp@hjp.at | Diskussion derzeit in at.usenet.gruppen
__/ | http://www.hjp.at/ |
Erik Braun wrote:
> Ist es trotzdem möglich, $text_tmp zu entbehren?
Nein, jedenfalls nicht mit weniger Verrenkungen.
Generell, so würde ich es begründen, kannst Du einen Rückgabewert
direkt nur als Ganzes verarbeiten, nicht lediglich einzelne Teile
daraus und den Rest unverarbeitet erhalten.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Hallo Frank
>> Ist es trotzdem möglich, $text_tmp zu entbehren?
>
> Nein, jedenfalls nicht mit weniger Verrenkungen.
Stimmt.
Hier ein Beispiel für Verrenkungen":
#!/usr/bin/perl -w
use strict;
my $text = "eins ";
my $status = 0;
sub X { $_[1] = ($text . $_[1]); @_; }
($status, $text) = X( &ausgabe );
print "Text: $text | Status: $status\n";
sub ausgabe {
# eigentlich viel Trara, hier nur direktes Setzen
my $status=1;
my $text="zwei";
return($status, $text);
}
Grüße
Mirco
Hallo Erik
> Wenn ich perlsub richtig verstanden habe, können mehrere Werte nur als
> flache Liste zurückgegeben werden oder per Referenz gesetzt werden. Ist es
> trotzdem möglich, $text_tmp zu entbehren?
Wie ich weiter unten schrieb, geht es
mit einigen Verrenkungen. Konnte es nicht
lassen, mich nach der Mittagspause noch
mal daran zu versuchen ;-)
Hier meine "generalisierte" Variante:
#!/usr/bin/perl -w
use strict;
my $catref = undef;
sub setCAT { $catref = defined $_[0] ? \$_[0] : undef }
sub CAT { $_[1]=$$catref.$_[1] if defined $catref; @_ }
my $text = "eins ";
my $status = 0;
setCAT $text; # Ausgabe "fortsetzen"
($status, $text) = CAT &ausgabe ;
print "Text: $text | Status: $status\n";
setCAT undef; # Ausgabe "normal"
($status, $text) = CAT &ausgabe ;
print "Text: $text | Status: $status\n";
sub ausgabe {
# eigentlich viel Trara, hier nur direktes Setzen
my $status=1;
my $text="zwei";
return($status, $text);
}
Ich bin natürlich kein "Perl-Profi", versuche aber,
mich Schritt für Schritt den Berg hochzuarbeiten.
Vielleicht kommt zu diesem Problem noch eine
Korrektur/Anmerkung von jemandem, der wirklich
in SV_, AV_ und RV_ zu Hause ist ...
Viele Grüße
Mirco
Post removed (X-No-Archive: yes)