=?ISO-8859-1?Q?Re=3A_Evaluar_expresi=F3n_booleana?=
Salvador Ortiz Garcia
sog@msg.com.mx
Thu, 12 Feb 1998 04:12:48 -0600 (CST)
On Thu, 12 Feb 1998, Jose Ignacio wrote:
> El problema era como hacer una variables como
>
> $expresion="esto" && "aquello"
> o
> $expresion="esto && aquello"
> o mil cosas más
>
> y luego utilizarla en una comparación como
> if ($loquesea=~/$expresion/) {
Haber si entendí:
Tu quieres en una variable tener una cadena que represente una expresión
booleana, como:
$expr = '$num == 5 && $animal eq "perro"';
y quieres que sólo cuando:
$num = 5;
$animal = 'perro';
y llames a algo como:
eval($expr)
entonces eval sea verdadero para usarlo en algo como:
if(eval($expr)) {
print "La expresión es verdadera\n";
} else {
print "La expresión es falsa\n";
}
Es éso lo que quieres?
Si es así, lo que necesitas es:
1. Cuando le asignes un valor a $expr lo hagas usando comillas sencillas,
(o mecanismos similares) para evitar que se evalúen tus variables
antes de tiempo.
2. Todas las variables que uses en tu expresión necesitan estar en el
mismo ambito que el eval (i.e. generalmente ser variables globales).
Ejemplo:
----- Corta aquí----
#!/usr/bin/perl
sub checa {
return eval($_[0]) ? 'verdadera' : 'falsa';
}
$expr = q{$num == 3 && $animal eq 'perro'};
print "Para la expresión '$expr'\n";
for $num (1..5) {
for $animal (qw(gato perro pájaro)) {
print "si \$num = $num y \$animal = $animal, la expresión es ",
checa($expr), "\n";
}
}
--------------------
Saludos.
Salvador Ortiz.