[Roma.pm] Porchetta.pm

Marco Balestra balestra at cesmail.net
Fri Feb 17 13:49:52 PST 2006


On 13 Feb 2006, at 22:23, Aldo Calpini wrote:

> è giunto il tempo di risvegliare, in spirito e panza, quest'aulico
> gruppo per l'occasione ribattezzato Porchetta.pm.

Posso stuzzicare l'appetito con un problema squisitamente Perl? :-)

Sto utilizzanto HTML::Template, e mi trovo nela situazine di voler  
popolare una select con optgroup e options variabili, il che tradotto  
in perlese vuol dire che vorrei dei dati come:

   select => [
     {
       label   => 'gruppo1',
       options => [
         { label => 'a', value => '1' },
         { label => 'b', value => 'd' },
         { label => 'c', value => '3' },
       ]
     },
     {
       label   => 'gruppo2',
       options => [
         { label => 'b', value => 'a' },
         { label => 'c', value => '8' },
         { label => 'v', value => 'c' },
       ]
     },
   ]

Siccome questi dati li derivo dinamicamente, devo costruirmi un array  
@all da passare come \@all
Incredibilmente, viste le mie capresche competenze, ci sono riuscito  
ed ha funzionato al primo colpo (ancora non ci credo). Prima  
definisco gli elementi di @all

	push @all,{ label => 'gruppoN', members => [] }

poi nel ciclo ci metto gli elementi:

	push @{$all[$groupindex]{'options'}}, { label => $testo, value =>  
$valore }

Ancora non mi e` ben chiaro il modo in cui viene inteso @{} e perche'  
in altri contesti non funziona, ma l'ho messo istintivamente ed e`  
andato liscio liscio, io gongolo e sono contento e mi sparo le pose.  
E allora che voglio, direte voi?
Voglio che alla fine del ciclo di scansione questi gruppi devono  
avere le select ordinate per label, e questo mi crea problemi.

Ho provato cosi`:

	for ($i=1; $i <= $max; $i++) {
		@{$all[$i]{'options'}} = sort labelSort @{$all[$i]{'members'}};
	}

con definito sotto:

	sub labelSort ($$) { return lc($_[0]{'label'}) cmp lc($_[1]{'label'}) }

Non da` errore, ma non ordina. Chi puo` gettare luce nella mia  
confusa testa?

TIA :-)
-- 
Marco Balestra
IT consultant
balestra at cesmail.net





More information about the Roma mailing list