2012-04-09 105 views
0

我正在創建一個小程序來查找特定的哈希鍵並替換它的源,但爲了執行此操作,我需要查找整個哈希並將其替換爲新哈希用戶輸入的值。Perl - 在另一個文件中搜索並替換哈希值

我的代碼示例。

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;  
} 

當散列值文件info.pl,其被包括在節目英寸

+1

請不要像perl腳本那樣讀取數據文件,並嘗試手工解析它。如果它是有效的perl,只需執行它並讓Perl爲你解析它。 – Ether 2012-04-09 16:27:52

+0

哈希它像一個數據庫我存儲一些信息,以後需要添加,刪除或編輯。這就是爲什麼我需要這樣做。 – user1253622 2012-04-09 16:30:43

+0

'嚴格使用;使用警告;'我懷疑你也會想'chomp'你的輸入。 – mob 2012-04-09 16:39:17

回答

0

可能是你,而應該讀

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

我不認爲它是一個有效的聲明:) – user1253622 2012-04-09 16:31:59

+0

但它是。如果你現在使用「$ var1」,那麼你將需要使用$ _替代。 – Alberto 2012-04-09 16:41:01

+0

嗨, 嗯,我現在做TI但可能輸出是這樣的: ':)'=> 「:)」, ':) - '=> 「1 ':) '=>」 TEST 「 ':) '=>」 TEST 而這是代碼: 而($ VAR1 = ){ \t \t \t \t \t \t $ VAR2 =格格($ _); \t \t \t \t \t \t $ VAR1 =〜S/$ VAR2/\ '$ EditSmile \'=> \ 「$的EditText \」/克; \t \t \t \t \t \t \t \t打印出$ VAR1; \t \t \t \t} – user1253622 2012-04-09 17:16:07

0

另一種選擇,如以太上述建議,是「做」你的PL文件,並直接改變了哈希值。

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

那麼它的輸出$ var1 !!爲什麼? – user1253622 2012-04-09 17:08:36