[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