1

という名前のハッシュがあり%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;
4

2 に答える 2

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(.*)/);
}
于 2013-01-21T09:24:44.487 に答える
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+
于 2013-01-21T11:03:24.267 に答える