[Linuxtrent] Re: W Perl ;)

  • From: Guido Brugnara <gdo@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Thu, 30 Sep 2004 19:59:07 +0200

Daniele Nicolodi wrote:
--cut--
8. Sintassi mostruosa. Questo è un programma perl valido:

 #!/usr/bin/perl

 $b = { "c" => [ { "a" => 1 } ] };
 $a = [ keys(%{shift(@{$b->{'c'}})}) ];
 print join("\n", @{$a}), "\n";

ma capire che cosa fa non mi pare assolutamente semplice.


Questo e' un problema di chi scrive codice, non del perl.


No. È un problema del perl che costringe ad utilizzare sintassi
astrusissime per fare anche delle cose banali. Per esempio mi viene in
mente il metodo per sapere la lunghezza di un array:

$len = scalar(@array);

ma era diffcile introdurre una funzione len() ? E poi tutto sto casino
dei reference e no reference che per farli e disfarli ci si incasina
sempre... tutto perchè in realtà per l'interprete tutti i dati sono
stringhe!

Scusa Daniele ma non posso non replicare a quanto dici in quanto non comprendi che tutto ciò è conseguenza delle scelte di fondo del linguaggio che ha le sue particolari caratteristiche che lo contraddistingono da altri.


Innanzitutto deve essere chiaro che in Perl i dati base sono solo di 5 tipi:

   - scalari
   - vettori
   - hash (detti anche vettori ad indice alfanumerico)
   - riferimenti
   - handle (per gli IO)

Tutti gli operatori e le funzioni hanno comportamento differenziato a seconda del contesto in cui vengono utilizzati; quindi per l'esempio che riporti per conoscere la lunghezza di un array io avrei scritto semplicemente:

    $len = @my_array;

che se usato per il classico ciclo 'for' lo usi così:

    for($i=0; $i<@array; $I++){
       ........
    }

Per l'interprete uno scalare non è una stringa ma contemporaneamente una stringa ed un numero e, a seconda dell'operatore utilizzato prende il significato di stringa o di numero.

C'è chi lo vede un vantaggio e c'è chi lo vede uno svantaggio; se lo vuoi usare il Perl ciò deve essere usato a tuo vantaggio, non trovì?

Anche i valori 'undef' sono estremamente utili, se sai sfruttarli avrai una marcia in più; se non ne conosci il comportamento avrai molti 'bachi' annidati nel Tuo codice..

In conclusione non cercare di usare il Perl come fosse "C" o altri linguaggi; usalo per quello che è ed avrai in cambio molte soddisfazioni.

bye bye
Guido Brugnara


-- Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: