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

时间:2013-01-21 09:20:30

标签: regex perl hash

我有一个名为%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;

2 个答案:

答案 0 :(得分:3)

一种方式:

#!/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(.*)/);
}

答案 1 :(得分:2)

对于初学者,请更改

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

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

至于价值,你想要

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

$coins{$_} = $_ =~ s/mno/new_value/gr;    # Perl 5.14+