Página 1 de 1

Interpolación de funciones

NotaPublicado: 2014-08-31 14:13 @634
por Pichuzard
Hola, buenas.

Soy principiante en esto de la programación en Perl y me encontré con un pequeño problema en un ejercicio propuesto en un libro de Perl al estar estudiando las referencias en el que me pide que mencione lo que imprime la siguiente línea de código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print("${\ref(\(1..5))}");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Mi respuesta inmediata fue ARRAY, pero mi sorpresa fue cuando al ejecutarlo me imprime SCALAR, ¿alguien sabe por qué?, según yo eso es una interpolación de la función ref() a la cual se le está pasando como parámetro una referencia a un ARRAY, precisamente una referencia a (1..5).

Espero me puedan resolver esta pequeña duda. De antemano, gracias. :D

Re: Interpolación de funciones

NotaPublicado: 2014-08-31 16:00 @708
por explorer
Bienvenido a los foros de Perl en Español, Pichuzard.

El ejercicio es un poco enrevesado...

\(1 .. 5 ) devuelve cinco referencias. Cada una, a una constante (referencia al número 1, al 2, etc.)

ref( ) nos dice qué tipo de referencia es la que se le pasa como argumento. Aunque le estamos pasando 5 referencias, solo toma en cuanta una de ellas. Y devuelve el texto "SCALAR", ya que todas las referencias anteriores son a escalares.

Luego viene algo raro.

\ref() La presencia de la '\' inicial hace que obtengamos una referencia a lo que devuelve ref(). Como nos devolvió una cadena de texto ("SCALAR"), pues el resultado es una referencia a esa cadena de texto.

Finalmente, viene el proceso contrario: una desreferencia:

${ } hace la desreferencia de lo anterior, así que aquí volvemos a obtener la cadena de texto "SCALAR", que es al final lo que imprime el print().

Más información en tu propio ordenador en perldoc perlref, y en la Web (traducido al español).

Re: Interpolación de funciones

NotaPublicado: 2014-09-01 18:30 @812
por Pichuzard
Gracias, explorer, creo que estudiaré más sobre las referencias. La verdad es que Perl es un lenguaje de programación muy interesante y en el que sabiéndolo utilizar se pueden lograr hacer muchas cosas en pocas líneas. Espero algún día poder dominarlo tanto o más que C. :)