Mar Jul 08, 2008 1:19 pm
|
 |
danimera
Perlero Adicto

|
Registrado: 23 Jun 2005
Mensajes: 212
Ubicación: Colombia
|
|
| Un pequeño problema con el valor de una variable |
|
|
Tengo este código:
| Perl: | sub localizar_foto {
my($dia, $mes, $anno, $category, $cliente) = @_;
my $db = "../". $cliente. "/db/fotos.txt";
@fotos =kread ($db, 0, 0);
$foto = "NO HAY FOTO3";
foreach $foto(@fotos) {
($id, $nombre, $tumb, $categoria, $dia_foto, $mes_foto, $anno_foto) = split(/\|\|/, $foto);
print $categoria, "->", $category. "===". $dia. "->". $dia_foto. ">>". $nombre;
print "<br>";
#if ($categoria eq $category && $dia_foto == $dia && $anno == $anno_foto ){
if ($dia_foto == $dia && $category == $categoria){
print "Nombre: ". $nombre. "<br>";
$foto = "gato";
print $foto;
}
}
return $foto;
}
1 |
Y me imprime esto:
| Código: |
2->1===8->24>>24juniop2.jpg
2->1===8->8>>8juniop2.jpg
2->1===8->5>>5juniop2.jpg
2->1===8->27>>27mayop2.jpg
2->1===8->22>>22mayop2.jpg
2->1===8->19>>19mayop2.jpg
2->1===8->16>>16mayop2.jpg
2->1===8->15>>15mayop2.jpg
2->1===8->8>>8mayop2.jpg
1->1===8->24>>24junio.jpg
1->1===8->8>>8junio.jpg
Nombre: 8junio.jpg
gato1->1===8->5>>5junio.jpg
1->1===8->27>>27mayo.jpg
1->1===8->22>>22mayo.jpg
1->1===8->19>>19mayo.jpg
1->1===8->16>>16mayo.jpg
1->1===8->15>>15mayo.jpg
1->1===8->8>>8mayo.jpg
Nombre: 8mayo.jpg
gato
Resultado: NO HAY FOTO3 |
Se supone que el if se cumple dos veces por lo tanto debería retornarme "gato" pero no, lo que me retorna es "NO HAY FOTO3".
¿QUÉ PASA? |
|
|
|

Mar Jul 08, 2008 1:46 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
|
|
|
|
|
Las variables utilizadas en los bucles for y foreach son 'localizadas' dentro del bucle. Es decir, la variable $foto que usas en el foreach es la misma que usas fuera del bucle, pero dentro del bucle, su valor es salvaguardado, y cuando se termina el bucle, se recupera su valor.
Primer párrafo de
http://perldoc.perl.org/perlsyn.html#Foreach-Loops
Es como si hubieras hecho un local a la variable.
Ejemplo:
| Perl: | $i = - 99;
for $i (0 .. 9 ) {
print $i;
}
print $i; # Sale -99
for ($i= 0; $i< 10; $i++ ) {
print $i;
}
print $i; # Sale 10
|
|
|
Mar Jul 08, 2008 2:02 pm
|
 |
danimera
Perlero Adicto

|
Registrado: 23 Jun 2005
Mensajes: 212
Ubicación: Colombia
|
|
|
|
|
| Ah, ya me decía yo que estaba por esos lados... sí, eso fue como si hiciera la variable local. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|