PDA

Visualizza la versione completa : abbreviazione if


homeworker
01-04-2005, 17:45
Non è la stessa cosa? Il primo mi funziona il secondo no
$pagato può esistere o non esistere (viene passato tramite una checkbox), se esiste $pagato diventa 1 altrimenti $pagato diventa 0 poi il valore 1/0 lo inserisco in un sql.


if ($pagato) { $pagato = '1' } else { $pagato = '0' };

$pagato ? $pagato = '1' : $pagato = '0';

Credo che nel secondo caso $pagato non viene valutato se esiste o meno, c'è una funzioncina che controlla questa cosa? Tipo exist($pagato)?

Grazie

shishii
02-04-2005, 11:02
deve esserci un altro problema, la seconda espressione è corretta e funziona.

la funzione "exists" esiste, ma si applica alle chiavi degli hash non alle variabili scalari

homeworker
02-04-2005, 19:22
Ho una funzione:


sub funzionemia {
my $pagato = $_[0];
$pagato ? $pagato = '1' : $pagato = '0';

# sql + dbi
# etc etc
}

la funzione la richiamo così

&funzionemia( $parametro );

$parametro è un parametro post che può esistere o meno (dipende dal checkbox).

Ciao, grazie

shishii
02-04-2005, 19:30
inserisci un print sotto
my $pagato = $_[0];
print $pagato;

e controlla cosa contiene effettivamente.

LordSaga640
03-04-2005, 21:59
Originariamente inviato da homeworker
Non è la stessa cosa? Il primo mi funziona il secondo no
$pagato può esistere o non esistere (viene passato tramite una checkbox), se esiste $pagato diventa 1 altrimenti $pagato diventa 0 poi il valore 1/0 lo inserisco in un sql.


if ($pagato) { $pagato = '1' } else { $pagato = '0' };

$pagato ? $pagato = '1' : $pagato = '0';

Credo che nel secondo caso $pagato non viene valutato se esiste o meno, c'è una funzioncina che controlla questa cosa? Tipo exist($pagato)?

Grazie
Se usi il moduli strict e sei riuscito ad eseguire lo script allora la variabile esiste. Però può essere definita o non definita.
Il tuo controllo ti permette di vedere solo se la variabile contiene GLi unici tre valori falsi sono ZERO NUMERICO, '' (stringa vuota) e undef (nessun valore). Tutti gli altri valori sono veri.
Per vedere se una variabile è definita o meno si usa la funzione defined:
defined($pagato) ? ($pagato=1) : ($pagato=0);

Però nel caso tuo penso che ti serva solo vedere se un valore è vero o falso.


Ricordati di includere sempre il modulo strict (minuscolo). I primi tempi tirrerai in terra qualche divinità shintoista ma con il tempo eviterai ogni tipo di errori.

see you again

homeworker
05-04-2005, 21:58
Grazie ragazzi mi ero scordato del post... :D

Si credo che alla fine mi dovrò fare un controllino con my $pagato = $_[0]; print $pagato;.


Se usi il moduli strict e sei riuscito ad eseguire lo script allora la variabile esiste. Però può essere definita o non definita. Si programmo sempre con strict ho inziato con tutorial che consigliavano questa cosa e ho sempre fatto così. In realtà uso un framework che utilizza mod_perl semplificandomi molto l'integrazione anche con pagine complesse.

In effetti credo che con my $pagato = $_[0]; (esista o meno $_[0]) la variabile $pagato per qualche motivo che ignoro sia non falsa.


sub funzionemia {
my $pagato; # uso strict
$_[0] ? $pagato = '1' : $pagato = '0';

# sql + dbi
# etc etc
}
oppure meglio ancora

sub funzionemia {
my $pagato; # uso strict
defined($_[0]) ? $pagato = '1' : $pagato = '0';

# sql + dbi
# etc etc
}

Loading