2012-04-09 203 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