如果该键与perl哈希中的regexp匹配,如何修改该值?

如果该键与perl哈希中的regexp匹配,如何修改该值?,regex,perl,hash,Regex,Perl,Hash,我有一个名为%coins的散列。 如果哈希的键与某个字符串匹配,我将尝试修改哈希的值。 我尝试了以下代码,但没有成功。它正在创建新键,而不是修改现有键的值 请帮忙 #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %coins; %coins = ( "abc" , 1, "mno pqr" , 2, "xyz", 3

我有一个名为
%coins
的散列。 如果哈希的键与某个字符串匹配,我将尝试修改哈希的值。 我尝试了以下代码,但没有成功。它正在创建新键,而不是修改现有键的值

请帮忙

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my %coins;
%coins = ( "abc" , 1,
          "mno pqr" , 2,
          "xyz",  3 );

print Dumper \%coins;

if(grep {/mno/} keys %coins)
{
    print"matched \n";
    $coins{$_} = s/$coins{$_}/new_val/g;
}

print Dumper \%coins;
单向:

#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper;

my %coins;
%coins = ( "abc" , 1,
          "mno pqr" , 2,
          "xyz",  3 );

print Dumper \%coins;

my $newval=9;
foreach my $k (keys%coins){
        $coins{$k}=$1.$newval.$2 if ($k =~/(.*)mno(.*)/);
}
单向:

#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper;

my %coins;
%coins = ( "abc" , 1,
          "mno pqr" , 2,
          "xyz",  3 );

print Dumper \%coins;

my $newval=9;
foreach my $k (keys%coins){
        $coins{$k}=$1.$newval.$2 if ($k =~/(.*)mno(.*)/);
}
首先,改变

if(grep {/mno/} keys %coins)
{
    ...
}

至于值,您希望

( my $new_val = $_ ) =~ s/mno/new_value/g;
$coins{$_} = $new_val;

首先,改变

if(grep {/mno/} keys %coins)
{
    ...
}

至于值,您希望

( my $new_val = $_ ) =~ s/mno/new_value/g;
$coins{$_} = $new_val;


参见相关:参见相关:谢谢您的回答。但是我想用
9 pqr
替换
mno pqr
(即2)的值。为了明确起见:我想用与键相同的值替换匹配键的值,但替换键中匹配的内容。呸。。越来越困惑了。。例如(在上面的代码中):如果匹配的键是“mno pqr”,那么我希望将“mno pqr”的值设置为“新值pqr”。如果键是
ghi mno pqr
,该怎么办?修改后的值将为
9 pqr
。应该是ghi 9 pqr…让我们感谢您的回答。但是我想用
9 pqr
替换
mno pqr
(即2)的值。为了明确起见:我想用与键相同的值替换匹配键的值,但替换键中匹配的内容。呸。。越来越困惑了。。例如(在上面的代码中):如果匹配的键是“mno pqr”,那么我希望将“mno pqr”的值设置为“新值pqr”。如果键是
ghi mno pqr
,该怎么办?修改后的值将为
9 pqr
。它应该是
ghi9pqr
…让我们看看,如果我这样做,输出是
VAR1={'mno pqr'=>2,'abc'=>1,'xyz'=>3};匹配的$VAR1={'mno pqr'=>'','abc'=>1,'xyz'=>3}但在更换后,它应该是
'mno pqr'=>新值pqr
该值被完整地替换为
新值
。例如(在上面的代码中):如果匹配的键是“mno pqr”,那么我想把“mno pqr”的值设为“new\u value pqr”哇,这是一件奇怪的事情。也修复了这个错误。古鲁的回答并不像我想象的那么糟糕。(它只是不处理“mno”的多个实例,这可能是个问题,也可能不是问题。)谢谢你的回答。这修复了对多个“mno”实例的处理。如果我这样做,输出是
$VAR1={'mno pqr'=>2,'abc'=>1,'xyz'=>3};匹配的$VAR1={'mno pqr'=>'','abc'=>1,'xyz'=>3}但在更换后,它应该是
'mno pqr'=>新值pqr
该值被完整地替换为
新值
。例如(在上面的代码中):如果匹配的键是“mno pqr”,那么我想把“mno pqr”的值设为“new\u value pqr”哇,这是一件奇怪的事情。也修复了这个错误。古鲁的回答并不像我想象的那么糟糕。(它只是不处理“mno”的多个实例,这可能是个问题,也可能不是问题。)谢谢你的回答。这修复了“mno”的多个实例的处理。