Perl - нужна помощь для заполнения Term :: ANSIMenu с элементами из существующего массива - PullRequest
1 голос
/ 07 ноября 2011

Попытка использовать Term :: ANSIMenu для создания хорошего меню.

В документе сказано, что items() ожидает массив массивов:

items()

Type: array of arrays
Constraints: [[<keyname>, <string>, <code_ref>], ...]
Default: []

Такэто прекрасно работает:

my $menu = Term::ANSIMenu->new(
    items  => [['1', 'First menu item', \&exec_item],
               ['2', 'And so on', \&exec_item],
              ]) ;

Что мне нужно сделать, это передать items() строки в существующем массиве (который динамически создается моей программой - он может содержать любое количество строк).

например,

@array = ('menu choice one', 'menu choice two', 'menu choice three') ;

Я изо всех сил пытаюсь создать «массив массивов», который я затем могу передать items().

Любые получатели?

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Вам необходимо передать ссылку на массив

Должно выглядеть так:

@array = (['1', 'First menu item', \&exec_item]); 
push @array, ['2', 'And so on', \&exec_item];

my $menu = Term::ANSIMenu->new(items => \@array);
1 голос
/ 07 ноября 2011

Используйте \@ для ссылки на существующий массив:

my @multiDimensionalArray = (\@preexistingArray1, \@preexistingArray2, ...);

или

my $multiDimensionalArrayRef = [\@preexistingArray1, 
                  \@preexistingArray2, ...]; # square brackets for array ref!

, тогда для items:

...
items => \@multiDimensionalArray
...

или

...
items => $multiDimensionalArrayRef
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...