Salve a Tutti , sto cercando di risolvere un problema per un software che sfrutta i package Curses::Widget e Curses::Widget::Menu<br>tale software è praticamente un frontend fatto da un menu che permette la scelta di alcune operazioni di aggiornamento dei miei portali su vps<br>
dalla mia macchina di sviluppo. tale frontend non deve fare altro che lanciare degli script shell che si occupano di effetture gli aggiornamenti.<br>Il problema che mi sto ponendo è che io voglio generare tali menu dinamicamente grazie ad una funzione che esegue un semplice &quot;ls&quot; su una dir <br>
purtruppo questo non riesco proprio a farlo è cioè non riesco a passare al costruttore dell pacchetto Curses::Widget::Menu un&#39; hash nella maniera in cui <br>lui si attende di riceverlo.<br>Vi incollo il codice:<br><br>
#!/usr/bin/perl<br>use warnings;<br>use Devel::StackTrace;<br>use Curses;<br>use Curses::Widgets;&nbsp; # Included to import select_colour &amp; scankey<br>use Data::Dumper;<br>#use Curses::Widgets::TextField;<br>#use Curses::Widgets::ButtonSet;<br>
#use Curses::Widgets::ProgressBar;<br>#use Curses::Widgets::TextMemo;<br>use Curses::Widgets::ListBox;<br>#use Curses::Widgets::Calendar;<br>#use Curses::Widgets::ComboBox;<br>use Curses::Widgets::Menu;<br>#use Curses::Widgets::Label;<br>
<br>my $menu;<br>my $mwh;<br>my $key;<br><br>$mwh = new Curses;<br><br>noecho();<br>halfdelay(5);<br>$mwh-&gt;keypad(1);<br>$mwh-&gt;syncok(1);<br>curs_set(0);<br>leaveok(1);<br><br>main_win();<br>$key = scankey($mwh);<br>
<br>$menu = Curses::Widgets::Menu-&gt;new({<br>FOREGROUND&nbsp; =&gt; &#39;white&#39;,<br>&nbsp; BACKGROUND&nbsp; =&gt; &#39;yellow&#39;,<br>&nbsp; BORDER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 1,<br>&nbsp; CURSORPOS =&gt; [qw(Aggiornamenti)],<br>&nbsp; FOCUSSWITCH =&gt; &quot;\t&quot;,<br>
&nbsp; MENUS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; {<br>&nbsp;&nbsp;&nbsp; MENUORDER&nbsp;&nbsp; =&gt; [qw(Aggiornamenti Log Tools Help)],<br>&nbsp;&nbsp;&nbsp; Aggiornamenti&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEMORDER =&gt; [qw(Internet Local Exit)],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Internet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; \&amp;submenu,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Local&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; \&amp;submenu,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; sub { exit 0 },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEMORDER =&gt; [qw(View)],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; View&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; sub { 1 },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tools&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEMORDER =&gt; [qw(Toolslist)],<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Toolslist&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; sub { 1 },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEMORDER =&gt; [qw(Help About)],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; sub { 1 },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; About&nbsp;&nbsp;&nbsp;&nbsp; =&gt; sub { 1 },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp; },<br><br>
&nbsp; });<br>$menu-&gt;execute($mwh);<br>$menu-&gt;draw($mwh);<br>scankey($mwh);<br><br>#exit 0;<br><br>END {<br>&nbsp; # The END block just ensures that Curses always cleans up behind<br>&nbsp; # itself<br>&nbsp; endwin();<br>}<br>exit 0;<br>
<br>##SUBROUTINE##<br><br><br>sub main_win {<br>&nbsp; $mwh-&gt;erase();<br>&nbsp; # This function selects a few common colours for the foreground colour<br>&nbsp; $mwh-&gt;attrset(COLOR_PAIR(select_colour(qw(red black))));<br>&nbsp; $mwh-&gt;box(ACS_VLINE, ACS_HLINE);<br>
&nbsp; $mwh-&gt;attrset(0);<br><br>&nbsp; $mwh-&gt;standout();<br>&nbsp; $mwh-&gt;addstr(0, 1, &quot;Welcome to the System Updater of XXXXX&quot;);<br>&nbsp; $mwh-&gt;standend();<br>}<br><br>sub genLstPortalMenu{<br>my $dirtolist=&quot;./binportal&quot;;<br>
my @portal;<br>@portal = `ls ./binportal/`;<br>return @portal;<br>}<br><br>sub submenu{<br>&nbsp;&nbsp; $mwh-&gt;erase();<br>&nbsp;&nbsp; my $submenu;<br>&nbsp;&nbsp; my @listportal = genLstPortalMenu();<br><br>$submenu = Curses::Widgets::Menu-&gt;new({<br>
&nbsp;&nbsp;&nbsp;&nbsp; FOREGROUND&nbsp; =&gt; &#39;white&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp; BACKGROUND&nbsp; =&gt; &#39;yellow&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp; BORDER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 1,<br>&nbsp;&nbsp;&nbsp;&nbsp; CURSORPOS =&gt; [qw(Portali)],<br>&nbsp;&nbsp;&nbsp;&nbsp; FOCUSSWITCH =&gt; &quot;\t&quot;,<br>&nbsp;&nbsp;&nbsp;&nbsp; MENUS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MENUORDER&nbsp;&nbsp; =&gt; [qw(Portali)],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Portali&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEMORDER =&gt; [@listportal],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><i><b>QUI DOVREI INSERIRE UNA STRUTTURA COME QUELLE PER LE ALTRE VOCI SOTTOSTANTI<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MA GENERATA DINAMICAMENTE E&#39; PURTROPPO NON RIESCO A TROVARE UN MODO.<br>
</b></i></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEMORDER =&gt; [qw(View)],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; View&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; sub { 1 },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tools&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEMORDER =&gt; [qw(Toolslist)],<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Toolslist&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; sub { 1 },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEMORDER =&gt; [qw(Help About)],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; sub { 1 },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; About&nbsp;&nbsp;&nbsp;&nbsp; =&gt; sub { 1 },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>
&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp; });<br>$submenu-&gt;execute($mwh);<br>1;<br>}<br><br>Grazie a tutti di avermi letto<br>Stefano Vitali<br><br>