5
  # 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が初めてです。私を助けてください。

4

5 に答える 5

14

配列の構文が正しくありません。匿名リスト参照を作成しており、@my_arrayその参照を含む単一要素リストです。

スカラーとして、参照を適切に処理できます。

$my_array = ["aa" , "bbb"];
$my_hash{"Kunjan"} = $my_array;

または、リストをリストとして操作して、ハッシュに入れるときにのみ参照を作成することもできます。

@my_array = ("aa" , "bbb");
$my_hash{"Kunjan"} = \@my_array;
于 2009-11-24T21:46:44.190 に答える
10

これをスクリプトの先頭にのみ配置した場合:

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.
  • arrayref を作成し、それを配列に割り当てようとしました -配列の宣言方法については、 perldoc perldataを参照してください
  • 配列をハッシュに代入しようとしました (配列参照などのスカラーのみを代入できます - 参照の詳細についてはperldoc perlrefを参照してください)
  • 配列要素を取得するには、ハッシュ要素を逆参照する必要があります。たとえば、ハッシュ参照を逆参照する方法については、perldoc perlref を参照し$my_hash{"Kunjan"}->[0]ください
于 2009-11-24T21:55:48.330 に答える
3

プログラムにいくつかのエラーがあります。

my @my_array = ("aa" , "bbb");
$my_hash{"Kunjan"} = \@my_array;
print $my_hash{"Kunjan"}[0];

3 つの変更を加えました。

  1. 1 行my目の の前に追加@my_array
  2. 最初の行の[...]toを変更します(...)
  3. \2 行目の @my_array の前にa を追加します
于 2009-11-24T21:45:02.850 に答える
0

これらの修正を試してください:

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/

于 2009-11-24T21:55:44.977 に答える
0

他の人はすでに何が何であるかをうまく説明していますが、追加したいと思います (特に Perl を初めて使用する場合)。時間をかけてperldscperllolのドキュメントを読んでいただければ幸いです。

于 2009-11-24T22:09:24.037 に答える