Newsgroup: it.comp.lang.perl
Titolo: Scirvere su un file...

Salve, dovrei scrivere su un file questa parte di codice:
foreach $g (in $domain) {
  print " $g->{'NAME'}" ;
}
il "print " $g->{'NAME'}" ;" deve essere stampato all'interno di un file.
Come devo fare?
Grazie.

 Come devo fare?
   Non so se sono io, se e` il caldo oppure...
   Se vuoi scrivere il tuo brano di codice in un file, segui quanto qui 
esposto:
<code>
	$mycode=<<'EOC';
	  foreach $g (in $domain) {
	    print " $g->{'NAME'}" ;
	  }
	EOC
	open FILE,'>
myfile.pl
' or die "
myfile.pl
: $!";
	print FILE $mycode;
	close FILE
</code>
   Se, invece, come reputo piu` probabile, vuoi scrivere in un file in 
contenuto di tutti i $g->{'NAME'} contenuti in un presumibile array 
@domain, allora usa il seguente codice:
<code>
	open FILE,'>
myfile.pl
' or die "
myfile.pl
: $!";
	foreach $g (@domain) {
	  print FILE $g->{'NAME'} . "\n" # would you like a newline?
	}
	close FILE
</code>
-- 
Alla prossima,
Marco

    E questo costrutto da dove salta fuori?
Salta fuori da un'applicazione in Perl che stò realizzando per il server di
un mio amico, che lavora su WinNT, siccome non ricordavo come scrivere in un
file ho chiesto qui.
Ho realizzato sempre applicazioni che lavorano restituendo il risultato in
una pagina html.
Grazie.

Ho finito l'applicazione, però quando lo script termina l'operazione ho un
l'errore:
CGI Error
The specified CGI application misbehaved by not returning a complete set of
HTTP headers. The headers it did return are:
xkè? Ciao e grazie.

una pagina html.
Qualsiasi cosa faccia la tua applicazione, purche' sia in perl, un ciclo
foreach devi scriverlo cosi`:
    foreach $g (@domain) {
    }
quell'"in" non e` una parola chiave perl. E non puoi usare uno scalare per
definire il dominio del for.
Ciao.

definire il dominio del for.
Niente da dire sul resto, ma questa affermazione non e` del tutto 
corretta. 'for' vuole una lista, non un array, quindi nulla vieta
di usare uno scalare come unico elemento della lista.
E` una tecnica molto pratica in certi casi, visto che il Perl non
ha un costrutto 'with' come ad esempio il Pascal. Ad esempio:
my $structure = {
  un => {
    incredibile => {
      caos => {
        di => {
          livelli => {
            nome => 'Pinco',
            cognome => 'Pallino',
            professione => 'programmatore',
            linguaggio => 'Perl',
          }
        }
      }
    }
  }
};
for my $p ( $structure->{'un'}
                      ->{'incredibile'}
                      ->{'caos'}
                      ->{'di'}
                      ->{'livelli'} ) {
  print "$p->{ nome }\n";  
  print "$p->{ cognome }\n"; # e cosi` via...
}
ciao
Stefano

 ha scritto nel messaggio
news:9DW29.33267$n04.9...@twister2.libero.it...



Spiegami bene la differenza rispetto a:
 {
   my $p =  $structure->{'un'}
                   ->{'incredibile'}
                   ->{'caos'}
                   ->{'di'}
                   ->{'livelli'};
   print $p->{'nome'}, "\n";  
   print $p->{'cognome'}, "\n"; # e cosi` via...
 }
Ciao.

 }
mmm...
La prima cosa che mi viene in mente e` che con la mia versione
si puo` evitare del tutto il lexical $p e usare l'aliasing 
implicito a $_:
for ( $structure->{'un'}
                ->{'incredibile'}
                ->{'caos'}
                ->{'di'}
                ->{'livelli'} ) {
  print "$_->{ nome }\n";  
  print "$_->{ cognome }\n"; # e cosi` via...
}
Riconosco pero` che si tratta di una differenza minima, credo
impercettibile (probabilmente a mio sfavore) dal punto di vista
prestazionale. Non ho fatto benchmark, qualcuno ne ha voglia?
ciao
Stefano

 prestazionale. Non ho fatto benchmark, qualcuno ne ha voglia?
Dal punto di vista delle prestazioni, l'uso di una variabile a scope
lessicale (dichiarata con my) dovrebbe essere preferibile rispetto a $_.
Innanzitutto, le variabili a scope lessicale hanno prestazioni migliori di
quelle globali, e $_ è una variabile globale. In secondo luogo, $_ viene
"localizzata" (scope dinamico, non lessicale!) all'ingresso di ogni ciclo
in cui viene usata come variabile implicita. Questo significa che il
valore di $_ deve essere ogni volta salvato e ripristinato.
Dal punto di vista prettamente stilistico, trovo che l'uso di $_ renda il
codice meno comprensibile.
Max