[Roma.pm] xml + tag name
Aldo Calpini
dada at perl.it
Tue Jul 24 03:45:28 PDT 2007
dice bene LucaS, non sono solo gli ettari di vegetazione a risentire del
clima torrido. pare che però la Protezione Civile non abbia un apposito
programma per prevenire gli incendi sulle mailing list :-)
quindi, essendo io particolarmente incivile, proverò a gettare un po' di
benzina sull'argomento.
è ovvio che tutto nasce sicuramente dalla leggerezza con cui LucaS ha
definito il mio snippet "HOP way". rimprovero però a Silvio altrettanta
leggerezza nel non capire che, appunto, non si stava necessariamente
dicendo "la ricorsione è higher order", unita ad eguale pesantezza nel
voler sottolineare che "il Perl è sempre HO".
tutti sappiamo che HO (come anche ricorsività, closure, currying etc) è
una proprietà del linguaggio, ma penso neanche Silvio possa negare che
ci sono tecniche, metodologie, "pattern" di programmazione che ne fanno
uso (a volte giustamente, altre volte in maniera forzata) e altre che
non lo fanno (a volte giustamente, altre volte in maniera forzata - come
l'esempio di Emanuele :-).
pertanto, la frase "è scorretto parlare di soluzioni HOP e non HOP" non
mi convince affatto.
il libro di Dominus (che, ripeto, io _non_ ho letto!) presenta una serie
di "pattern" che fanno uso appunto di HO, ricorsività, closure, currying
e chi più ne ha più ne metta. immagino dia anche indicazioni su cosa
usare e cosa non usare, quando, e perché.
a questo punto sarebbe, come sostiene Silvio, da rimproverare anche la
leggerezza di Dominus nell'aver intitolato "Higher Order Perl" un libro
che non presenta _soltanto_ pattern di "higher order programming". ma
non credo sia questo il caso.
si ricordi che il titolo originale del libro era "Perl Advanced
Techniques Handbook", e ritengo che il titolo finale sia stato scelto
più per rinforzare un "pun" e per motivi estetici (tipo l'acronimo HOP)
che perché Dominus non sia in grado di distinguere HO da REC o perché il
suo studio della teoria dei linguaggi non sia serio.
poi sono d'accordo che sia facile cadere in becere identificazioni del
tipo "è ricorsivo, è funzionale", e che questo possa far benire i
brividi. ma i giudizi "tranchant" di Silvio, che sembra dare per
scontato che ci siamo cascati tutti, mi danno ugualmente i brividi (e
co' sto caldo...).
per finire in bellezza, beccatevi sta versione sguaiatamente HOPpica del
"modo per ricavare i nomi dei tag utilizzando XML::Simple" (ormai
Fabrizio Cardarello si sarà pentito di averlo chiesto :-):
cheers,
Aldo
use XML::Simple;
my $data;
{ undef $/; $data = <DATA>; }
my $x = XMLin( $data, KeepRoot => 1 );
sub isa_tree {
my($arg) = @_;
return ref($arg) eq 'HASH';
}
sub walktree(&$\%) {
my($func, $depth, $tree) = @_;
while(my($k, $v) = each %$tree) {
walk($func, $depth, $k, $v);
}
}
sub walk(&$$$) {
my($func, $depth, $k, $v) = @_;
$func->($depth, $k);
walktree(\&$func, $depth+1, %$v) if isa_tree($v);
}
walktree { print " " x $_[0], "$_[1]\n" } 0, %$x;
__DATA__
<a>
<b>
<c />
<d />
</b>
<e />
<f>
<g />
<h />
</f>
</a>
More information about the Roma
mailing list