4

私は次のコードを持っています:

my @array = ('a', 'b', 'c');

my $region = \@array;  # Returns an array reference
my $Value = ${@{$region}}[3];   

私はstrictを使用しています。

このコードはPerlv5.8.6でスムーズに渡され、v5.10.1をインストールしたので、ランタイムエラーが発生します。

「strictrefs」が...で使用されている間は、文字列( "4")をARRAYrefとして使用できません。

コードを次のように変更したところ、問題は解決しました。

my @array = ('a', 'b', 'c');

my $region = \@Array;
my @List = @{$region};
my $Value = $List[3];   

私の質問は、前の方法の何が問題になっているのかということです。これら2つのバージョンの間で何が変わったのですか?ここで何が欠けていますか?

ありがとう、ギャル

4

2 に答える 2

11

${@{$region}}[3]arrayrefにアクセスする正しい方法ではありませんでした。それが何を意味するのかよくわかりませんし、Perlもそうではないと思います(したがって、Perlのバージョンによって動作が異なります)。

正しい方法はperlrefで説明されています:

my $Value = ${$region}[3]; # This works with any expression returning an arrayref
my $Value = $$region[3];   # Since $region is a simple scalar variable,
                           # the braces are optional
my $Value = $region->[3];  # This is the way I would do it
于 2011-08-14T11:43:44.937 に答える
2

これは私がそれをする方法です:

my @array = ('a', 'b', 'c');
my $region = \@array;
my $Value = $$region[1];
print $Value;

出力:

b
于 2011-08-14T10:51:36.787 に答える