• Publicidad

Parametros a una función

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Parametros a una función

Notapor danimera » 2006-09-04 23:12 @008

¿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.004 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?
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Notapor kidd » 2006-09-05 01:08 @089

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
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2006-09-05 04:35 @232

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
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor danimera » 2006-09-05 06:12 @300

Ha, es decir que no tengo problemas con esto,, Pense que los tendria ^^


Thanks
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Notapor Perl user » 2006-09-05 09:19 @430

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,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor Rene Serrano » 2006-11-28 12:10 @548

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
Rene Serrano
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2006-11-27 12:35 @565
Ubicación: El salvador CA

Notapor explorer » 2006-11-28 13:31 @605

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 10 invitados