Perl - ссылка на массив с использованием строгого - PullRequest
4 голосов
/ 14 августа 2011

У меня есть следующий код:

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

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

Я использую строгий;

Этот код прошел гладко в Perl v5.8.6, и теперь, когда я установил v5.10.1, я получаю ошибку времени выполнения:

Невозможно использовать строку ("4") в качестве ссылки на ARRAY, в то время как "строгие ссылки" используются в ...

Я изменил код на следующий, и это решило проблему:

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

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

Мой вопрос: что не так с предыдущим способом? Что изменилось между этими двумя версиями? Что мне здесь не хватает?

Спасибо, Gal

Ответы [ 2 ]

11 голосов
/ 14 августа 2011

${@{$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
2 голосов
/ 14 августа 2011

Вот как бы я это сделал:

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

Выход:

b
...