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()
に渡すことができ、「配列の配列」を作成するのに苦労しています。
任意の受取人ですか?
を '私の@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)" –
@NormaStitz私はあなただけの誤解だと思う[ターム:: ANSIMenu](https://metacpan.org/ module/Term :: ANSIMenu)documentation:各項目配列の3番目の要素は、そのボタンに関連付けられたコード化されたものでなければなりません。 あなたのケースの作業コードの例は次のとおりです。https://gist.github.com/4ea508b0e8e865ab1fdd – yko
これをさらに進めていただきありがとうございます。あなたは3番目の要素を削除してprint_menu()を動作させるのは間違いありませんが、実際にはコードレファを関連付ける必要があります。基本的にはユーザの選択を処理する機能です。しかし、どのように書式を設定しようとしても、3番目の要素を追加するとすぐに「無効な値」エラーが発生します。 –