【问题标题】:Perl - Search and replace a hash value in another filePerl - 在另一个文件中搜索和替换哈希值
【发布时间】:2012-04-09 16:06:33
【问题描述】:

我正在创建一个小程序来查找特定的哈希键并替换其来源,但为此我需要找到整个哈希并将其替换为用户输入的新哈希值。

我的代码示例。

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中的位置,该文​​件包含在程序中。

【问题讨论】:

  • 请不要像读取数据文件一样读取 perl 脚本并尝试手动解析它。如果它是有效的 perl,只需执行它并让 Perl 为您解析它。
  • 哈希就像一个数据库,我存储一些信息,以后需要添加、删除或编辑。这就是为什么我需要这样做。
  • use strict; use warnings; 我怀疑你也想chomp 你的输入。
  • 嗨,问题是我不是 perl 的专家 :)

标签: perl hash replace


【解决方案1】:

也许你的 while 应该读

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

【讨论】:

  • 我不认为这是一个有效的声明:)
  • 但确实如此。如果您现在在 while 中使用“$var1”,那么您将需要使用 $_ 进行替换。
  • 嗨,我现在做了,但我们的输出是这样的:':)' => ":)", ':-)--' => "1':) ' => "TEST "':) ' => "TEST 代码如下: while ($var1 = ){ $var2 = chomp($_); $var1 =~ s/$var2/\'$EditSmile\' => \"$EditText\"/g;打印出 $var1; }
【解决方案2】:

另一个选项,正如上面 Ether 建议的那样,是“做”你的 pl 文件并直接更改哈希。

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

【讨论】:

  • 它的输出 $var1 !为什么?
猜你喜欢
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
相关资源
最近更新 更多