Frédéric: RA hat es einen? ersetzen

Hi,

Ich habe eine kleine Frage zu den RA in Perl.

Ich habe ein Array, und möchte schauen, ob Elemente des Arrays ein Ausdruck enthält (z.B. "rot"). Dann soll es ersetzen (z.B. durch "grün"). Kann man diese beide Schritten in nur einen verkürzen? So muss der Skript nicht zweimal die Zeichenkette durchsuchen.

Ein Beispiel:

@array=("Meine Lieblingsfarbe ist grün","Er hat eine rote Nase","Der Tisch ist rot");

for (@array) {
 if ($_ =~ /rot/) {
  $_=~ s/rot/grün/gi;
  push(@list,$_);
 }
}

Hier durchsucht er das Array zweimal nach rot. Ich will es in einem SChritt machen. Geht das?

  1. Sup!

    @array = map {$_ =~ s/rot/grün/gi} @array;

    könnte gehen.

    Gruesse,

    Bio

    1. Hi!

      @array = map {$_ =~ s/rot/grün/gi} @array;

      Ich denke, das er ja nur die haben will, in der auch das Wort 'rot' enthalten ist. Ich würds also so machen:

      @list = map { s/rot/grün/gi; $_; } grep { /rot/ } @array;

  2. Hallo,

    so:

    @array=("Meine Lieblingsfarbe ist grün","Er hat eine rote Nase","Der Tisch ist rot");

    foreach(@array) {
      s/rot/grün/gi;
      push(@list,$_);
    }

    Gruß mormel