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