Página 1 de 1

Parametros a una función

NotaPublicado: 2006-09-04 23:12 @008
por danimera
¿Cómo podría pasar un hash como parámetro a una función? Usaría algo como esto pero es correcto

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
&procedimiento ($valor1,%hash);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¿Será que sí?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub procedimiento(
    @valores = _@;
);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿no es como raro eso, pero será que es posible?

NotaPublicado: 2006-09-05 01:08 @089
por kidd
Hola:

Recuerda que un hash no es más que una lista de pares tipo llave-valor.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
procedimiento ($valor1,%hash);


sub procedimiento{

    my ($valor, %hash) = @_;

}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Saludos

NotaPublicado: 2006-09-05 04:35 @232
por explorer
También puedes pasarlo por referencia:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %hash = (
    enero => 15,
    febrero => 18,
    marzo => 3,
);

my $valor = 2;

&procedimiento( $valor, \%hash );

sub procedimiento {
    my ( $valor, $refhash ) = @_;

    foreach my $clave ( sort keys %$refhash ) {
        print "$clave : ", $valor * $refhash->{$clave}, "\n";
    }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2006-09-05 06:12 @300
por danimera
Ha, es decir que no tengo problemas con esto,, Pense que los tendria ^^


Thanks

NotaPublicado: 2006-09-05 09:19 @430
por Perl user
explorer escribiste:También puedes pasarlo por referencia:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %hash = (
    enero => 15,
    febrero => 18,
    marzo => 3,
);

my $valor = 2;

&procedimiento( $valor, \%hash );

sub procedimiento {
    my ( $valor, $refhash ) = @_;

    foreach my $clave ( sort keys %$refhash ) {
        print "$clave : ", $valor * $refhash->{$clave}, "\n";
    }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En realidad la respuesta es para todos, solo que tomé este quote haciendo referencia a 'referencia' :lol:

En realidad en Perl el paso por referencia es hecho SIEMPRE, puesto que todos los parámetros pasados lo son así. El array @_ es un alias a los argumentos mandados a la función ( lo cual internamente es representado con un paso por referencia ).

Es por eso que en muchos textos y tutoriales encontrarán que la recomendación es siempre hacer una copia de @_ ( que es lo que normalmente se hace ), y que al pasar UNA referencia a la estructura que te interesa, en realidad ( internamente ) pasas un alias a dicha referencia ( una ref a otra ref )

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @a = (1, 2, 3, 4);

sub foo { $_[1]++ }

foo( @a );
print @a;   # 1334
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Esta pequeña porción de código ejemplifica a lo que verdaderamente me refiero con un 'alias' a los argumentos de la función, y esto es algo similar a:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
*_ = *a{ARRAY}
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora bien, no hay que confundir como Perl maneja una referencia, a una referencia manejada por C++ por ejemplo. Aunque los términos tienen mucho en común, el tipo de dato ( sus operaciones ) es completamente diferente.

En realidad hay un poquito de mas profundidad en el tema del paso de parámetros hacia una función en un lenguaje, pero espero con lo anterior, en el caso de Perl, haber quitado dicho malentendido.

Saludos,

NotaPublicado: 2006-11-28 12:10 @548
por Rene Serrano
He creado esta estructura pero el problema lo tengo al pasar el resultado del query a otra función que es donde necesito buscar dentro del hash. A ver si me ayudan por favor.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $SQL = "select IdUsuario,Password from Usuarios";
if($connection->Sql($SQL))
    {
        print "NO Se puedo realizar la intruccion:\n $SQL\n";
        print "A ocurrido un error:\n";
        print $connection->Error() . "\n";
       
        ## Closing the database connection
        $connection->Close();
       
        ## Exiting the program
        die;
    }
while ($connection->FetchRow())
    {
        my %dataRow = $connection->DataHash();
                       
    }
       
sub seekU()
    {
        my ($dataRow)=@_;
        print $dataRow{IdUsuario};
    }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


saludos

NotaPublicado: 2006-11-28 13:31 @605
por explorer
Deberías empezar un nuevo hilo, para plantear tu problema, quizás...

El código mostrado no me da idea de qué es lo que quieres. Veo que está la función seekU, pero no la veo usada en ninguna otra línea.

Para devolver una estructura desde una función se suele poner un return con el valor de la estructura o una referencia a ella.