1

ハッシュ値を指すハッシュ参照を使用してハッシュの値を更新する方法はありますか?

私のハッシュ出力は次のようになります。

    'Alternate' => {
        'free' => '27.52',
        'primary' => 'false',
        'used' => '0.01',
        'name' => '/mydir/journal2',
        'size' => '50.00'
     },
    'Primary' => {
        'free' => '60.57',
        'primary' => 'true',
        'used' => '0.06',
        'name' => '/mydir/journal',
        'size' => '64.00'
    }
};

ハッシュ内の「使用済み」プロパティへのハッシュ参照を作成しようとし、値を更新しようとしました:

$hash_ref = \%hash->{"Primary"}->{used};
$hash_ref = "99%";
print $$hash_ref, "\n";

これによりハッシュの値が変更されますが、「ハッシュを参照として使用することはX行で非推奨です」というメッセージが表示されます。私がやろうとしていることは可能で、何が間違っているのか知りたいです。

4

2 に答える 2

4
 ...
'Primary' => {
    'free' => '60.57',
    'primary' => 'true',
    'used' => '0.06',
    'name' => '/mydir/journal',
    'size' => '64.00'
}
 ...

次のようにして、非推奨の問題を回避してみてください。

 ...
my $hash_ref = $hash{'Primary'}; # if you declared `%hash = ( .. );`
# Or my $hash_ref = $hash->{'Primary'}; if you declared `$hash = { .. };`
print $hash_ref->{used}; # Prints 0.06
$hash_ref->{used} = '0.07'; # Update
print $href->{used}; # Prints 0.07
 ...

詳細については、 perldscを参照してください。

于 2014-03-10T12:55:39.740 に答える
0

スカラーへのハッシュ参照を作成しようとしたため、失敗が始まりました。これらは異なるデータ型であるため、これは意味のない目標です。Filippo が既に示したように、より大きなハッシュの値としてハッシュ参照が既にあるため、それを信頼できます。

ただし、スカラーへの参照を本当に作成したい場合は、その値を編集するだけです。これはあなたがそれを行う方法です:

use strict;
use warnings;

my $h = {
    'Alternate' => {
        'free' => '27.52',
        'primary' => 'false',
        'used' => '0.01',
        'name' => '/mydir/journal2',
        'size' => '50.00',
     },
    'Primary' => {
        'free' => '60.57',
        'primary' => 'true',
        'used' => '0.06',
        'name' => '/mydir/journal',
        'size' => '64.00',
    }
};

my $primary = $h->{Primary};
print $primary->{used}, "\n"; # Outputs 0.06

my $usedref = \$h->{Primary}{used};
$$usedref = '0.07';

print $primary->{used}, "\n"; # Outputs 0.07
于 2014-03-10T18:40:12.690 に答える