[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