2013-04-05 4 views
0
use strict; 
my @a; 
my @b =(); 
@a = (3, 4); 

push @b, [@a]; 

my @c = @b[0]; 
print @c; 

Как правильно восстановить @c? Он говорит мне, что значение Scalar @b [0] лучше написано как $ b [0].Извлечение массива из массива массивов?

(Это не мой реальный код из соображений конфиденциальности, но в реальном коде у меня есть что-то вроде этого:

my @a = @{$b[$i]}; 
print @a; 

Это говорит: «Использование неинициализированного значения», но по-прежнему печатает то, что он должен .

ответ

3

Если у вас есть ссылка на массив хранится в $b[0] - что ваша ситуация - тогда вы получить его как

$ref = $b[0] # I just want it as a reference 

или

@arr = @{$b[0]} # I want it as a (new) array 

или

$elt = $b[0][1] # I want to directly access the second element 
$elt = $b[0]->[1] # alternative syntax, same thing. 
+0

Редактировать: Nevermind, проблема разрешена. – user1126849

2

Подробные сведения о синтаксисе для доступа к массиву см perldata

@c[0] является срез массива один элемент (!) $c[0] правильно

$c[0]->[0] является «3» и $c[0]->[1] является «4»

Для получения более подробной информации о массивах массивов см perldsc и perllol

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