Skrilax: Rekrsive Funktion in Perl

Beitrag lesen

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.