# I have a hash
my %my_hash;
# I have an array
@my_array = ["aa" , "bbb"];
# I store the array in my hash
$my_hash{"Kunjan"} = @my_array;
# But I can't print my array's element
print $my_hash{"Kunjan"}[0];
私はPerlが初めてです。私を助けてください。
# I have a hash
my %my_hash;
# I have an array
@my_array = ["aa" , "bbb"];
# I store the array in my hash
$my_hash{"Kunjan"} = @my_array;
# But I can't print my array's element
print $my_hash{"Kunjan"}[0];
私はPerlが初めてです。私を助けてください。
配列の構文が正しくありません。匿名リスト参照を作成しており、@my_array
その参照を含む単一要素リストです。
スカラーとして、参照を適切に処理できます。
$my_array = ["aa" , "bbb"];
$my_hash{"Kunjan"} = $my_array;
または、リストをリストとして操作して、ハッシュに入れるときにのみ参照を作成することもできます。
@my_array = ("aa" , "bbb");
$my_hash{"Kunjan"} = \@my_array;
これをスクリプトの先頭にのみ配置した場合:
use strict;
use warnings;
...何が問題なのかを示すエラー メッセージが表示されます。
Global symbol "@my_array" requires explicit package name at kunjan-array.pl line 8.
Global symbol "@my_array" requires explicit package name at kunjan-array.pl line 11.
したがって、最初に配列を宣言するmy @my_array;
と、次のようになります。
Can't use string ("1") as an ARRAY ref while "strict refs" in use at kunjan-array.pl line 14.
$my_hash{"Kunjan"}->[0]
てくださいプログラムにいくつかのエラーがあります。
my @my_array = ("aa" , "bbb");
$my_hash{"Kunjan"} = \@my_array;
print $my_hash{"Kunjan"}[0];
3 つの変更を加えました。
my
目の の前に追加@my_array
[...]
toを変更します(...)
\
2 行目の @my_array の前にa を追加しますこれらの修正を試してください:
my %my_hash;
# ["aa" , "bbb"] produces an array reference. Use () instead
my @my_array = ("aa" , "bbb");
# 'Kunjan' hash is given reference to @my_array
$my_hash{ Kunjan } = \@my_array;
# bareword for hash key is nicer on the eye IMHO
print $my_hash{ Kunjan }[0];
ただし、この方法を使用する場合、考慮すべきことが 1 つあります。
unshift @my_array, 'AA';
print $my_hash{ Kunjan }[0]; # => AA - probably not what u wanted!
したがって、おそらくあなたが求めているのは次のとおりです。
$my_hash{ Kunjan } = ["aa" , "bbb"];
その後、ハッシュは @my_array を参照しなくなります。
/I3az/