如果该键与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”的多个实例的处理。