2010-06-03 4 views
7

В следующем Perl кода, я бы ожидать, чтобы быть ссылки ссылка на массив внутри массиваPerl, разыменовать массив ссылок

#!/usr/bin/perl 

use strict; 
use warnings; 

my @a=([1,2],[3,4]); 

my @b = @$a[0]; 

print $b[0]; 

Однако это не похоже на работу. Я бы ожидать, что это выход 1.

@a является массивом ссылок

@b разыменовывается $a[1] (я думаю)

Так в чем проблема?

ответ

10

Этот материал сложный.

@$a[0] обрабатываются как (@$a)[0], разыменование (неопределенный) скаляра $a

Вы хотели сказать @{$a[0]}.

+0

В Perl так много причуд, что я до сих пор привык. спасибо за вашу помощь – Mike

+6

Если у вас есть сомнения, просто добавьте еще брекеты: D – Ether

Смежные вопросы