Rekrsive Funktion in Perl
Dietrich
- perl
Hallo,
wie muss ich im folgenden Beispiel vorgehen, dass beim Folgeaufruf der Routine addtext im Argument @text der Wert steht, der im Aufruf zuvor zurückgegeben wurde.
Im Augenblick wird addtext immer mit "*" aufgerufen, obwohl im Ergebnis @text des Aufruf "*;irgendwas" steht.
my @text = ("*");
foreach (@zeilen)
{
@text = addtext ($_, @text);
}
Hallo,
wie muss ich im folgenden Beispiel vorgehen, dass beim Folgeaufruf der Routine addtext im Argument @text der Wert steht, der im Aufruf zuvor zurückgegeben wurde.
Im Augenblick wird addtext immer mit "*" aufgerufen, obwohl im Ergebnis @text des Aufruf "*;irgendwas" steht.my @text = ("*");
foreach (@zeilen)
{
@text = addtext ($_, @text);
}
Dazu müsste man wohl wissen, was in der Funktion "addtext" drin steht. Kennst du auch die Funktion "push"? Vermutlich willst du nur sowas in der Art haben:
push @text, @zeilen;
Damit wird einfach das Array @zeilen an @text angehängt.
my @text = ("*");
foreach (@zeilen)
{
@text = addtext ($_, @text);
}Dazu müsste man wohl wissen, was in der Funktion "addtext" drin steht. Kennst du auch die Funktion "push"? Vermutlich willst du nur sowas in der Art haben:
Hier die Routine:
(Ziel: Zeilen weiter zerlegen, wenn mind. 45 Stellen)
sub addtext
{
my $zeile = shift;
my @textneu = shift;
if (length($zeile) < 45)
{
push(@textneu,$zeile);
}
else
{
# noch nicht realisiert
}
return(@textneu);
} # Ende sub addtext
Hier die Routine:
(Ziel: Zeilen weiter zerlegen, wenn mind. 45 Stellen)sub addtext
{
my $zeile = shift;
my @textneu = shift;
Hier ist der Fehler. shift gibt immer den nächsten Skalar zurück, was bei dir eben immer das "*" ist. Folgende Möglichkeiten:
my @textneu = @_;
$zeile ist aus dem Parameter-Array durch das vorhergehende shift entfernt worden, so das nur noch das benötigte @text drin steht.
oder du arbeitest mit Referenzen. also
my @textneu = @{shift()};
und der Aufruf erfolgt dann über
@text = addtext ($_, @text);
Diese Variante ist dann brauchbar, wenn du evtl. mal nach dem Array noch einen dritten Parameter übergeben willst.
if (length($zeile) < 45)
{
push(@textneu,$zeile);
}
else
{
# noch nicht realisiert
}
return(@textneu);
} # Ende sub addtext
Wünsche frohes Schaffen.
Hallo,
»»Wünsche frohes Schaffen.
Danke für die Hilfe, jetzt kann ich wieder froh schaffen.
Gruß
woako