2012-02-19 2 views
3

Я пытаюсь использовать массив массивов в объекте Perl и до сих пор не понимаю, как это работает.Массив массивов в объекте Perl

Вот конструктор:

sub new { 
    my $class = shift; 
    my $self = {}; 
    $self->{AoA} = []; 
    bless($self, $class); 
    return $self; 
} 

А вот часть кода, который вставляет материал в ССХ:

push (@{$self->{AoA}}[$row], $stuff); 

Я до сих пор не могу найти что-либо на пути, чтобы определить массив массивов в конструкторе.

ответ

4

Вам не нужно определять AoA в конструкторе - просто самый верхний массив. Что касается блаженного хэша, то AoA - это просто массив.

Ваш конструктор идеален.

Для вставки, вы делаете 2 вещи:

# Make sure the row exists as an arrayref: 
$self->{AoA}->[$row] ||= []; # initialize to empty array reference if not there. 
# Add to existing row: 
push @{ $self->{AoA}->[$row] }, $stuff; 

Или, если вы добавляете заведомо указательный элемент, просто

$self->{AoA}->[$row]->[$column] = $stuff; 

Ваша проблема с выполнением push @{$self->{AoA}}[$row], что вы разыменовываются массив 1 уровень слишком рано.

+0

Тогда что мне нужно сделать, кроме того, что вы нажимаете материал в одном из массивов? Или я толкаю неправильный путь? – claf

+0

@claferri - обновлено, пожалуйста, проверьте это. Извините, сохранен слишком рано – DVK

+0

спасибо, это сработало, я упустил скобку :) – claf

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