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!