2011-11-07 6 views
1

Term::ANSIMenuを使用して素敵なメニューを構築しようとしています。Perl - 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()に渡すことができ、「配列の配列」を作成するのに苦労しています。

任意の受取人ですか?

答えて

1
あなたは reference to array

万一のように見える渡す必要が

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

my $menu = Term::ANSIMenu->new(items => \@array); 
+0

を '私の@menu_items =(); my @tmp =(); my $ counter = 1; foreach my $ item(@available_choices){ @tmp =( "$ counter"、 "$ item"、 '\&process_item()'); push @menu_items、[@tmp]; $ counter ++; } 私の$ menu = Term :: ANSIMenu-> new(width => 40、 title => 'あなたの運命や死を選ぶ!'、 items => \ @menu_items、 prompt => 'Selection:>' ); $メニュー - > print_menu();で結果の上に ' "の項目の値が無効です:ARRAY(0x9110f0c)" –

+0

@NormaStitz私はあなただけの誤解だと思う[ターム:: ANSIMenu](https://metacpan.org/ module/Term :: ANSIMenu)documentation:各項目配列の3番目の要素は、そのボタンに関連付けられたコード化されたものでなければなりません。 あなたのケースの作業コードの例は次のとおりです。https://gist.github.com/4ea508b0e8e865ab1fdd – yko

+0

これをさらに進めていただきありがとうございます。あなたは3番目の要素を削除してprint_menu()を動作させるのは間違いありませんが、実際にはコードレファを関連付ける必要があります。基本的にはユーザの選択を処理する機能です。しかし、どのように書式を設定しようとしても、3番目の要素を追加するとすぐに「無効な値」エラーが発生します。 –

1

使用\@既存のアレイ参照する:itemsためそれでは

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

又は

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

を:

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

又は

... 
items => $multiDimensionalArrayRef 
... 
関連する問題