2012-04-09 8 views
0

Ich erstelle ein Mini-Programm, um einen bestimmten Hash-Schlüssel zu finden und seine Quelle zu ersetzen, aber dazu muss ich den ganzen Hash finden und durch einen neuen Hash ersetzen die Werte, die der Benutzer eingibt.Perl - Suchen und Ersetzen eines Hash-Wertes in einer anderen Datei

Beispiel meines Codes.

print "Please input the smile you would like to edit: "; 
$EditSmile = <STDIN>; 
print "Please input the text you want to change: "; 
$EditText = <STDIN>; 

open (IN, "< info.pl") || die("Can not open file: $!"); 

while (<IN>){ 
    $var1 =~ s/\'$EditSmile\' => "$smileinfo{"$EditSmile"}"/\'$EditSmile\' => "$EditText"/g; 
    print $var1;  
} 

Wo die Hash-Werte in der Datei sind info.pl, die in dem Programm enthalten ist.

+1

Bitte lesen Sie nicht in einem Perl-Skript, wie es eine Datendatei war und versuchen, es von Hand zu analysieren. Wenn es perl gültig ist, führe es einfach aus und lass Perl es für dich parsen. – Ether

+0

Der Hash ist wie eine Datenbank Ich speichere einige Informationen, die später hinzugefügt, gelöscht oder bearbeitet werden müssen. Deshalb muss ich das tun. – user1253622

+0

'verwenden Sie streng; benutze Warnungen; 'Ich vermute, du willst auch deine Eingabe" chomp "machen. – mob

Antwort

0

Wahrscheinlich die während

while ($var1 = <IN>) { 
    ... 
} 
+0

Ich glaube nicht, es ist eine gültige Aussage :) – user1253622

+0

aber es ist. Wenn Sie jetzt "$ var1" in der while verwenden, müssen Sie $ _ für die Ersetzung verwenden. – Alberto

+0

Hallo, Nun, ich habe ti jetzt aber die ourput ist wie folgt: ':)' => ":)", ':) -' => "1 ':) ' =>" TEST " ':) ' =>" TEST Und das ist der Code: while ($ var1 = ) { \t \t \t \t \t \t var2 $ = chomp ($ _); \t \t \t \t \t \t $ var1 = ~ s/$ var2/\ '$ EditSmile \' => \ "$ EditText \"/g; \t \t \t \t \t \t \t \t Druck var1 $ OUT; \t \t \t \t} – user1253622

0

Eine weitere Option lesen sollte, wie Ether oben vorgeschlagen, ist zu Ihrer pl Datei "do" und den Hash direkt ändern.

my $hash = do "info.pl"; 
if (exists($hash->{$EditSmile})) { 
    $hash->{$EditSmile} = $EditText; 
} 
use Data::Dumper; 
print Dumper($hash); 
+0

Nun seine Ausgabe $ var1 !! Warum ? – user1253622

Verwandte Themen