• Publicidad

Perl a Fortran (punteros)

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Perl a Fortran (punteros)

Notapor explorer » 2010-10-26 11:16 @511

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for ($ind = 0; $ind <= $#refp; $ind++)
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Se nota que este código tiene tiempo... esto ya no se escribe así, en Perl moderno...

El $#refp es, efectivamente, un escalar. Devuelve el valor del último índice del array @refp.

Así que esa línea está recorriendo todos los índices del array @refp.

Esa línea se puede escribir también así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for ($ind = 0; $ind < @refp; $ind++)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


@refp, en contexto escalar, devuelve el número de elementos que contiene, así que el bucle recorre los mismos índices.

De forma más abreviada,
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for my $ind (0 .. $#refp)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Incluso, si no nos interesan los índices del array, si no sólo sus elementos, se podría dejar en
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for my $item (@refp)
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

Publicidad

Re: Perl a Fortran (punteros)

Notapor alain_fyf » 2010-10-27 05:41 @278

Gracias, Explorer, al final sólo tu te compadeces de mi y sigues ayudándome.

Bueno, pues te explico lo que he entendido y me dices si es así o no.

La parte de la que tengo duda es a qué se refiere con $#refp y según entendí es el valor de número de elementos que contiene el array, es decir el índice. Por ejemplo, si @refp=(a,e,i,o,u) al poner $#refp me devuelve un 5, ¿es así?

Y la expresión
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for ($ind = 0; $ind <= $#refp; $ind++)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Se podría reemplazar perfectamente por
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for ($ind = 0; $ind <= 5; $ind++)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y otra cosa, en esta expresión
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for ($ind = 0; $ind < @refp; $ind++)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


en la que dices que se puede reemplazar; en $ind< @refp has quitado el '=' porque Perl empieza a contar desde cero?

Gracias nuevamente.
alain_fyf
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-10-22 09:51 @452

Re: Perl a Fortran (punteros)

Notapor explorer » 2010-10-27 06:37 @317

alain_fyf escribiste:La parte de la que tengo duda es a qué se refiere con $#refp y según entendí es el valor de número de elementos que contiene el array, es decir el índice. Por ejemplo, si @refp=(a,e,i,o,u) al poner $#refp me devuelve un 5, ¿es así?
No. Vuelve a leer con calma lo que te he escrito antes. Incluso lo tienes fácil, desde la propia línea de comandos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perl -le '@refp = qw(a e i o u); print "@refp"; print $#refp; print scalar @refp'
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Los índices de los array comienzan en 0.
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

Re: Perl a Fortran (punteros)

Notapor alain_fyf » 2010-10-27 08:46 @407

¡Jo!, se me olvidó eso. Pues entonces es un 4, va desde índice 0 hasta 4 con incrementos de uno.

Buscando por mi cuenta para no quitarte demasiado tiempo he encontrado esto:
Tenemos una notación especial para conocer el último índice del arreglo.

Del arreglo @animal=("ratón","perro","vaca","gorrión","paloma","halcón");
$#animal sería igual a 5.



Ahora he encontrado el símbolo '&'
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
        $dppar = &{$refpdfpar[$ind]} ($val);    
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Qué tipo de variable es &?
alain_fyf
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-10-22 09:51 @452

Re: Perl a Fortran (punteros)

Notapor explorer » 2010-10-27 10:21 @473

No es ninguna variable. Es para indicar que lo que sigue es una función o método, y que deseamos ejecutar.

Más información en perlsub (en tu ordenador: perldoc perlsub)
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

Re: Perl a Fortran (punteros)

Notapor alain_fyf » 2010-10-28 04:18 @221

Explorer, ¿qué no duermes? siempre te veo "on line".

Ayer leí lo que me escribiste sobre este símbolo '&' y entendí que es una forma de llamar a una subrutina.

Y todos los ejemplos que vi son de llamar a una subrutina especifica pero mi problema es el siguiente: y es que {$refpdfpar[$ind]} no es una subrutina.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
        for ($ind = 0; $ind <= $#refp; $ind++)
        {
                $val = ${$refp[$ind]};
                $dppar = &{$refpdfpar[$ind]} ($val);
                $fd *= $dppar;
        }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Del trozo de código anterior:

$val toma el valor del escalar que esta apuntando $refp.

Después vienen mis problemas, porque $dppar obtiene el valor de una función (por lo del '&') pero resulta ser que $refpdfpar no es una subrutina, es un puntero
definida así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
        @refpdfpar = ($pdf_fracs, $pdfcltime);  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y no sé muy bien qué hace esta línea.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$dppar = &{$refpdfpar[$ind]} ($val);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Cómo afecta $val a $dppar?
¿y al final qué valor tiene $dppar?

Gracias.
alain_fyf
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-10-22 09:51 @452

Re: Perl a Fortran (punteros)

Notapor explorer » 2010-10-28 06:21 @306

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@refpdfpar = ($pdf_fracs, $pdfcltime);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

@refpfpar no es un puntero, es un array que almacena dos valores: $pdf_fracs y $pdfcltime.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$dppar = &{$refpdfpar[$ind]} ($val);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

$dppar obtiene el valor de la ejecución de la función referenciada por $refpdfpar[$ind], con el parámetro $val.

$refpdfpar[$ind] es uno de los elementos del array @refpdfpar. Y contiene una referencia a una función, que es tanto $pdf_fracs o $pdfcltime. Es decir, estas variables contienen referencias a funciones.
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

Re: Perl a Fortran (punteros)

Notapor alain_fyf » 2010-10-28 09:16 @427

Gracias nuevamente, explorer. Sí que hay dos funciones y ahora mismo estoy programando eso a Fortran 90.

Una cosa que me sería de mucha ayuda es saber si existe en Perl un comando que haga una pausa en la ejecución del programa.

Por ejemplo, en Fortan si quiero que el programa se ejecute y al llegar a un cierto proceso se detenga, uso el comando pause que espera en ese punto hasta que yo le de un enter desde el teclado.

¿En Perl hay algún comando que haga esto?
alain_fyf
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-10-22 09:51 @452

Re: Perl a Fortran (punteros)

Notapor explorer » 2010-10-28 09:58 @457

No, en Perl v5 no lo hay. Pero no cuesta mucho imitarlo...

print "Pulse [ENTER] para continuar...\n"; <>;
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

Re: Perl a Fortran (punteros)

Notapor alain_fyf » 2010-10-29 10:40 @486

Hoy he adelantado mucho y cada vez va mejor y las cosas ya no me parecen tan extrañas, pero he llegado a un parte del programa que tiene esto
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
        $$refpar = $val;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Si fuera $refpar=$val sería fácil para mi porque es que un escalar de refpar almacena lo que hay en val pero al tener $$ no sé qué es. O_o ¿A qué se refiere con un doble $?
alain_fyf
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-10-22 09:51 @452

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

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