ループを経由せずにハッシュを初期化する方法を見つけようとしています。そのためにスライスを使用したいと思っていましたが、期待した結果が得られないようです。
次のコードについて考えてみます。
#!/usr/bin/Perl
use Data::Dumper;
my %hash = ();
$hash{currency_symbol} = 'BRL';
$hash{currency_name} = 'Real';
print Dumper(%hash);
これは期待どおりに機能し、次の出力を生成します。
$VAR1 = 'currency_symbol';
$VAR2 = 'BRL';
$VAR3 = 'currency_name';
$VAR4 = 'Real';
次のようにスライスを使用しようとすると、機能しません。
#!/usr/bin/Perl
use Data::Dumper;
my %hash = ();
my @fields = ('currency_symbol', 'currency_name');
my @array = ('BRL','Real');
@hash{@array} = @fields x @array;
出力は次のとおりです。
$VAR1 = 'currency_symbol';
$VAR2 = '22';
$VAR3 = 'currency_name';
$VAR4 = undef;
明らかに何か問題があります。
だから私の質問は次のようになります:2つの配列(キーと値)が与えられたときにハッシュを初期化する最もエレガントな方法は何ですか?
use strict;
use warnings; # Must-haves
# ... Initialize your arrays
my @fields = ('currency_symbol', 'currency_name');
my @array = ('BRL','Real');
# ... Assign to your hash
my %hash;
@hash{@fields} = @array;
したがって、必要なのは、キーの配列と値の配列を使用してハッシュを設定することです。次に、次の手順を実行します。
#!/usr/bin/Perl
use strict;
use warnings;
use Data::Dumper;
my %hash;
my @keys = ("a","b");
my @values = ("1","2");
@hash{@keys} = @values;
print Dumper(\%hash);'
与える:
$VAR1 = {
'a' => '1',
'b' => '2'
};
%hash = ('current_symbol' => 'BLR', 'currency_name' => 'Real');
または
my %hash = ();
my @fields = ('currency_symbol', 'currency_name');
my @array = ('BRL','Real');
@hash{@fields} = @array x @fields;
最初のものについては、試してみてください
my %hash =
( "currency_symbol" => "BRL",
"currency_name" => "Real"
);
print Dumper(\%hash);
結果は次のようになります。
$VAR1 = {
'currency_symbol' => 'BRL',
'currency_name' => 'Real'
};