Newsgroup: it.comp.lang.perl
Titolo: Ha senso un "use" all'interno di un if?

Salve. Sto scrivendo uno script cgi che, fra le altre cose, ha la
funzione di invio email. Volendo renderlo cross-platform, e utilizzando
sotto Unix la classica sintassi dei dati in pipe ad un filehandle aperto
us sendmail, mi chiedo se ha senso un costrutto del genere:
if ($os eq "unix") {
	open (MAIL , "| $sendmail");
	# ecc. ecc.
	close MAIL;
} else {
	use Net::SMTP;
	# ecc. ecc.
}
Insomma, vorrei utilizzare il modulo Net::SMTP solo se il server non usa
sendmail (quindi, in linea di massima, non è uno unix).
Ha un qualche senso o mi conviene utilizzare sempre Net::SMTP senza
farmi troppi problemi? (anche se a me i dati in pipe a endmail
piacciono!!)
Ciao
M.
-- 
:wq

 endmail piacciono!!)
  Anche a me piacciono, ma in fondo perche` reinventare la ruota? :)
	Alla prossima,
		Marco

tipo non ha alcun senso.
D'accordo con te al 100%, anche in seguito a verifica sul cammello, ma...
quel codice funziona proprio come uno si apetterebbe....
Anzi ho usato questo, per farlo "lavorare" un po' di piu':
<code>
$sendmail="/usr/sbin/sendmail -t";
$os=$ARGV[0];
if ($os eq "unix") {
        print "Uso sendmail\n";
        open (MAIL , "| $sendmail");
        print MAIL <<TESTO
To: $ENV{USERNAME}\@localhost
From: $ENV{USERNAME}\@localhost
Messaggio di prova
TESTO
;
        close MAIL;
} else {
        print "Uso Net::SMTP\n";
        use Net::SMTP;
        $smtp = Net::SMTP->new('localhost') || die $!;
        $smtp->mail("$ENV{USERNAME}\@localhost");
        $smtp->to("$ENV{USERNAME}\@localhost");
        $smtp->data();
        $smtp->datasend("To: $ENV{USERNAME}\@localhost\n");
        $smtp->datasend("\n");
        $smtp->datasend("Messaggio di prova\n");
        $smtp->dataend();
        $smtp->quit;
}
</code>
Sono sotto Linux e la mail arriva in ogni caso.
-- 
Saluti,
Giancarlo

quel codice funziona proprio come uno si apetterebbe....
Come non detto.... ho fatto un'affermazione falsissima.......
il modulo Net::SMTP viene caricato comunque e sempre indipendentemente dall'if,
come e' naturale.
-- 
Saluti,
Giancarlo

 
  use X; 
equivale a tutti gli effetti a
 BEGIN { require X; import X; }
quindi, ovunque tu lo collochi, verrà eseguito comunque in fase di
compilazione.
Dovresti poter ottenere l'effetto che desideri usando /require e /import
esplicitamente.
Max

 wrote:



Scusa, come fai a vedrlo?
Dopo la domandina curiosa, la sintesi: quindi mi conviene utilizzare
Net::SMTP e solo quello così mi tolgo il pensiero. Peccato! ;-)
(anche se utilizzare l'if magari penalizza un attimo la velocità però
non uccide nessuno, giusto?)
Ciao
M.
-- 
:wq

sendmail (quindi, in linea di massima, non è uno unix).
Veramente io per motivi di affidabilita` ti consiglio di usare sempre
Net::SMTP.
-- 
ciao, | * The Internet is full. Go away.  -- Joel Furr *
Marco | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it

Scusa, come fai a vedrlo?
Prendi il mio codice di prima, sposta le linee $smtp->xxx nel primo blocco
dell'if (dove non c'e' "use Net::SMTP") al posto del "print MAIL" e funziona lo
stesso perche' il modulo Net::SMTP e' caricato comunque.
-- 
Saluti,
Giancarlo

 stesso perche' il modulo Net::SMTP e' caricato comunque.
Già! Avevo pensato anch'io ad un metodo simile: se parte la mail, il
modulo è caricato!
Ma mi chiedo: non si può vederlo in qualche altro modo più tecnico?
Ad esempio, una cosa del genere mi servirebbe per controllare quali
moduli carica un certo script: ad esempio, se ho
use modulo;
vorrei sapere anche quali altri moduli richiede "
modulo.pm
", senza dover
andare a leggermi il listato di "
modulo.pm
", cercare gli /use/ e, per
ognuno, andare a vedere il listato del modulo "dipendente" per vedere se
ne richiama altri (e via in loop!)
Che voi sappiate si può?
Ciao
M.
-- 
:wq

 come e' naturale.
Scusa se sono ancora nel thread, ma voglio andare a fondo di una
faccenda: in questo modo (cioò con Net::SMTP caricato in ogni caso) se
ho, un po' per assurdo, uno Unix (quindi a cui posso mandare i dati in
pipe a sendmail) che non ha il modulo Net::SMTP, lo script dà errore di
compilazione, giusto?
A questo punto, non so più che strada prendere!! :-(
Ciao
M.
-- 
:wq