Frank Schönmann: Austausch einer Variablen in einer Liste...

Beitrag lesen

hi!

Wenn es übereinstimmt sollte die übereinstimmende Variable mit
einer neuen in der Liste vorhanden Variablen getauscht werden.

#!/usr/bin/perl -w

use strict;

$Alles = "/action/perltest.shtml";
@Getrennt = split(///, $Alles);

@Liste = (@Nr1, @Nr2);
@Nr1 = ("action","Action");
@Nr2 = ("perltest.shtml","Menu");

Du kannst @Liste doch nicht defineren, bevor du @Nr1 und @Nr2 mit
Werten belegt hast. Wenn, dann musst du das hintendran schreiben,
also:
  @Nr1 = ("action", "Action");
  @Nr2 = ("perltest.shtml", "Menu");
  @Liste = (@Nr1, @Nr2);

Du solltest dir übrigens im Klaren darüber sein, dass @Liste danach
folgendermaßen aussieht:
  ("action", "Action", "perltest.shtml", "Menu")
und nicht so, wie du es anscheinend vermutest:
  (("action", "Action"), ("perltest.shtml", "Menu"))

Um das zu erreichen, könntest du zum Beispiel Referenzen verwenden
(siehe perldoc perlref):
  @Liste = (@Nr1, @Nr2)
oder Hashes:
  %Replace = ("action" => "Action", "perltest.shtml" => "Menu")

for (@Getrennt)
{
$jetzt = $_;

Vielleicht solltest du dir etwas klarer über die Syntax von Perl
werden. Das kannst du einfach so schreiben:
  for $jetzt (@Getrennt)
bzw. äquivalent:
  foreach $jetzt (@Getrennt)

for (@Liste)
{
for (@_)

@_ ist eine Spezialvariable, und zwar wird darin die Parameterliste
einer Funktion bzw. des Perl-Skripts gespeichert. Der aktuelle Wert
der @Liste steht in $_ (bzw. ist das sogar in dem Fall eine zweite
Instanz des aktuellen Elements).

{
if ($_[0] eq /$jetzt/)
  {

Hier wirfst du Stringvergleiche und reguläre Ausdrücke durcheinander.
Richtig wäre (zumindest syntaktisch):
  if ($_ eq $jetzt)

$jetzt = $_[1];
  }
}

}
print $jetzt, "\n";
}

Naja, vielen Dank.

Vielleicht einfach mal neumachen, nachdem du dich etwas mehr in Perl
eingearbeitet hast? ;)

bye, Frank!