Mie Jun 25, 2008 1:44 pm
|
 |
danimera
Perlero Adicto

|
Registrado: 23 Jun 2005
Mensajes: 239
Ubicación: Colombia
|
|
| Un problema de hash por referencia |
|
|
Estoy usando el HTML::Template para pasar unos datos y desplegarlos en un select, pero cuando utilizo este código de esta función | Perl: | sub obtener_categorias {
my($cliente) = @_;
my $categorias = "../". $cliente. "/db/categorias.txt";
my @loop_data = ();
my %loop;
@categorias = kread ($categorias, 1, 0);
foreach $registro(@categorias){
$registro =~ s/\n//g;
($id, $nombre, $privacidad) = split(/\|\|/, $registro);
if ($privacidad == 0){
#$categorias{'CATEGORIA'} = $nombre;
#$categorias{'IDCATEGORIA'} = $id;
$loop{CATEGORIA } = $nombre;
$loop{IDCATEGORIA } = $id;
# push(@loop_data, \%categorias);
push(@loop_data, \ %loop);
}
}
print "<pre>";
print Dumper ( @loop_data );
print "</pre>";
return @loop_data; |
EL Data::Dumper me arroja esto:
| Código: |
$VAR1 = {
'CATEGORIA' => 'Punto 9',
'IDCATEGORIA' => '9'
};
$VAR2 = $VAR1;
$VAR3 = $VAR1;
$VAR4 = $VAR1;
$VAR5 = $VAR1;
$VAR6 = $VAR1;
$VAR7 = $VAR1;
$VAR8 = $VAR1;
$VAR9 = $VAR1;
$VAR10 = $VAR1;
$VAR11 = $VAR1; |
Solamente me muestra el último valor obtenido del fichero, el punto9 en este caso.
Y cuando lo utilizo de esta forma: | Perl: | sub obtener_categorias {
my($cliente) = @_;
my $categorias = "../". $cliente. "/db/categorias.txt";
my @loop_data = ();
my %loop;
@categorias = kread ($categorias, 1, 0);
foreach $registro(@categorias){
$registro =~ s/\n//g;
($id, $nombre, $privacidad) = split(/\|\|/, $registro);
if ($privacidad == 0){
#$categorias{'CATEGORIA'} = $nombre;
#$categorias{'IDCATEGORIA'} = $id;
$loop{CATEGORIA } = $nombre;
$loop{IDCATEGORIA } = $id;
# push(@loop_data, \%categorias);
push(@loop_data, %loop); #AQUI SOLO QUITO EL / DE PASAR POR REFERENCIA
}
}
print "<pre>";
print Dumper ( @loop_data );
print "</pre>";
return @loop_data; |
El Data::Dumper me arroja esto. Ahí esta bien, me arroja todas las categorías, pero me da error en el HTML::Template:
| Código: |
$VAR1 = 'CATEGORIA';
$VAR2 = 'Punto 10';
$VAR3 = 'IDCATEGORIA';
$VAR4 = '10';
$VAR5 = 'CATEGORIA';
$VAR6 = 'Punto 11';
$VAR7 = 'IDCATEGORIA';
$VAR8 = '11';
$VAR9 = 'CATEGORIA';
$VAR10 = 'Punto 1';
$VAR11 = 'IDCATEGORIA';
$VAR12 = '1';
$VAR13 = 'CATEGORIA';
$VAR14 = 'Punto 2';
$VAR15 = 'IDCATEGORIA';
$VAR16 = '2';
$VAR17 = 'CATEGORIA';
$VAR18 = 'Punto 3';
$VAR19 = 'IDCATEGORIA';
$VAR20 = '3';
$VAR21 = 'CATEGORIA';
$VAR22 = 'Punto 4';
$VAR23 = 'IDCATEGORIA';
$VAR24 = '4';
$VAR25 = 'CATEGORIA';
$VAR26 = 'Punto 5';
$VAR27 = 'IDCATEGORIA';
$VAR28 = '5';
$VAR29 = 'CATEGORIA';
$VAR30 = 'Punto 6';
$VAR31 = 'IDCATEGORIA';
$VAR32 = '6';
$VAR33 = 'CATEGORIA';
$VAR34 = 'Punto 7';
$VAR35 = 'IDCATEGORIA';
$VAR36 = '7';
$VAR37 = 'CATEGORIA';
$VAR38 = 'Punto 8';
$VAR39 = 'IDCATEGORIA';
$VAR40 = '8';
$VAR41 = 'CATEGORIA';
$VAR42 = 'Punto 9';
$VAR43 = 'IDCATEGORIA';
$VAR44 = '9';
Software error:
HTML::Template->output() : fatal error in loop output : HTML::Template : Attempt to get nonexistent parameter 'punto 10' - this parameter name doesn't match any declarations in the template file : (die_on_bad_params set => 1) at C:/Perl/site/lib/HTML/Template.pm line 3068
at E:\O'Telch\Sitios web\bitacora\riocauca\index.pl line 22 |
Bueno, ¿cómo puedo solucionar este problema? |
|
|
|

Mie Jun 25, 2008 1:54 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4100
Ubicación: Valladolid, España
|
|
|
|
|
Coloca la línea my %loop; dentro del bucle foreach del primer código que muestras.
Así, se crea un nuevo hash en cada vuelta. |
|
Mie Jun 25, 2008 2:05 pm
|
 |
danimera
Perlero Adicto

|
Registrado: 23 Jun 2005
Mensajes: 239
Ubicación: Colombia
|
|
|
|
|
| GRACIAS GRACIAS |
|
Powered by phpBB © 2001, 2005 phpBB Group
|