*   >> Lectura Educación Artículos >> tech >> desarrollo web

Fundamentos de ActivePerl Reference

Conceptos básicos de ActivePerl - Parte 18 Introducción Esto es parte de mi serie 18, Fundamentos de ActivePerl. Una región en la memoria es un conjunto de células de memoria consecutivas. Valores (contenidos variables) se mantienen en regiones de memoria. Una variable identifica una región de memoria. Una referencia es un puntero a una región de la memoria y se utiliza generalmente cuando usted está más interesado en lo que está en una región de memoria y no a la variable. Considere una referencia como la dirección de una región de memoria.

Esta región de memoria puede tener un valor. En esta parte de la serie, nos fijamos en referencia ActivePerl. Todo lo descrito en este tutorial es aplicable al tradicional Perl. Nota: Si no puede ver el código o si cree que falta algo (enlace roto, la imagen ausente), simplemente en contacto conmigo en [email protected]. Es decir, en contacto conmigo para el más mínimo problema que tenga acerca de lo que está leyendo. Memoria Región Una región de memoria es un área en la memoria de la computadora que tiene el valor de una variable.

Por valor aquí, me estoy refiriendo a un valor escalar, array o hash. Diferentes Regiones de memoria con distintas variables Considere las siguientes dos afirmaciones consecutivas: my $ myVar =; "Yo soy el contenido de un gran archivo de texto desde el disco duro, ahora en la memoria." mi $ Avar = "Yo soy el contenido de un gran archivo de texto desde el disco duro, ahora en la memoria."; Usted tiene dos variables diferentes con nombres diferentes pero con los mismos valores de cadena. Una variable identifica una región de memoria.

Dos variables diferentes con dos nombres diferentes identifican dos regiones de memoria diferentes, todo en igualdad de condiciones. En el caso anterior, los dos valores, a pesar de que son los mismos, se encuentran en dos regiones de memoria diferentes. Misma región de memoria para dos distintas variables En ActivePerl que usted puede hacer la misma región de memoria tiene dos variables diferentes. Las dos variables diferentes, por supuesto, identificar el mismo valor.

Considere las siguientes dos afirmaciones consecutivas: my $ myVar = "Yo soy el contenido de un gran archivo de texto desde el disco duro, ahora en la memoria."; mi $ hisVar = \\ $ myVar; Por primera declaración tiene un valor asignar a la variable, $ myVar. En la segunda declaración, $ myVar es precedido con el \\ signo antes de ser asignado a una nueva variable, $ hisVar. \\ Es un operador. En el segundo comunicado, la \\ operador, que precede a la primera variable, hace que la segunda variable de identificar la misma región de memoria (mismo valor) como la primera variable.

Una cosa importante a señalar aquí es que \\ $ myVar se refiere a una región de memoria. Para la segunda declaración, \\ $ myVar, con \\, es una referencia (dirección de la región de memoria identificado por $ myVar). $ hisVar es una variable, no una referencia. Decimos $ myVar contiene un valor (la cadena), mientras que $ hisVar mantiene la referencia (dirección).

Utilizando una referencia Ahora que tiene una referencia, ¿cómo se puede obtener el valor de la región de memoria que una variable se refiere? En otras palabras, una variable es la celebración de la referencia de alguna región de memoria, ¿cómo se puede obtener el valor de esa región de memoria, utilizando la variable? En el caso anterior, $ hisVar es la celebración de la referencia de la región identificada por $ myVar. Para obtener el valor con $ myVar, no hay problema, porque sólo hay que utilizar $ myVar en lugar del valor.

Para obtener el valor de la variable ($ hisVar), que tiene la referencia, usted tiene que utilizar las llaves {} de la siguiente forma: $ {$ hisVar} En este caso, estamos ante un escalar, por lo que se comienza con el signo escalar. Esto es seguido por un par de llaves. Entre las llaves, usted tiene la variable que contiene la referencia. El siguiente código ilustra esto: usar estricta; print "Content-Type: text /html \\ n \\ n"; mi $ myVar = "Yo soy el contenido de un gran archivo de texto desde el disco duro, ahora en la memoria.

"; mi $ hisVar = \\ $ myVar; print $ {$ hisVar}; Es decir que sustituya hisVar con {$ hisVar}. Escalar y Referencia La explicación anterior es aplicable a escalares. Algo similar es aplicable a los arrays y hashes. Sin embargo, con arreglos y hashes, hay dos formas de crear una referencia y dos formas de utilizar la referencia.

Matriz y Referencia Considere la siguiente creación de la matriz: miarr = ("uno", "dos", 3, 4); Para hacer una referencia a partir dearr, usted tiene que preceder a la variable con el \\ signo, ya que la siguiente declaración ilustra: my $ Aref = \\arr; Matriz Anonymous En la sección de arriba, necesita dos declaraciones con el fin de llegar a una referencia de matriz. La primera declaración da la matriz un nombre,arr. Ahora, es posible utilizar una sola sentencia para llegar a un arreglo. En este caso, la matriz no tendrá un nombre.

Se acaba de tener una referencia a la región en la memoria que tiene la matriz. La siguiente declaración ilustra esto: mi $ Aref = ["uno", "dos", 3, 4]; Nota aquí que tenemos entre corchetes para delimitar los elementos de la matriz y no a los soportes curvos de lista como antes. Bajo esta condición, los corchetes devolver una referencia (dirección de memoria) a la matriz. Esta referencia devuelta se asigna a la variable escalar, $ Aref. Usted no necesita el \\ signo aquí, ya que la matriz no tiene un nombre y \\ se debe utilizar en frente de un nombre.

Nota: Cualquier variable que contiene una referencia es una variable escalar. Así que la referencia de un array o hash se celebró por una variable escalar. El uso de una matriz de referencia Una forma de obtener la matriz de una referencia de matriz (variable que contiene la referencia) es el uso de los aparatos de ortodoncia. Para la referencia anterior, debería escribir, @ {$ Aref} Puedes comenzar con el signo matriz, @, ya que se trata de una matriz. Esto es seguido por tirantes. Entre las llaves, usted tiene la variable que contiene la referencia.

Por lo general, no se utiliza la matriz en su conjunto (como se indica más arriba). Por lo general, utiliza un elemento de la matriz. Para una matriz que tiene un nombre, si usted desea utilizar el nombre de la matriz para obtener un elemento, debería escribir algo como: $ arr [2] en el que el nombre de la matriz (variable) esarr. Cuando usted tiene una referencia a la matriz, hacer algo similar pero con las llaves de la siguiente forma: $ {$ Aref} [2] Es decir que sustituya, arr con {$ Aref}.

La otra forma de acceder a un arreglo es aplicable cuando se desea un elemento de la matriz (esto es lo que hace la mayoría de las veces). Con este modo, no se empieza con el signo escalar anterior, $. También omite las llaves. Sin embargo, usted sigue la variable de referencia de matriz, con una flecha, -> (signo menos seguido de signo mayor que), como en el siguiente ejemplo: $ Aref -> [2] El uso de esta forma no depende de si la referencia de matriz era de una matriz que tiene un nombre o un array anónimo.

Lea y probar el siguiente código: use strict; print "Content-Type: text /html \\ n \\ n"; miarr = ("uno", "dos", 3, 4); mi $ Aref = \\arr; print $ {$ Aref} [1]; print "mi $ arRef = [" uno "," dos ", 3, 4]; imprimir $ arRef -> [3]; Hash y Referencia Considere la siguiente creación de hash: my% ha = (Apple =>" púrpura ", Plátano => "amarillo", Pera => "verde", Limón => "verde"); Para hacer una referencia a partir de% ha, lo que tiene que preceder con el \\ signo, ya que la siguiente declaración ilustra: my $ href = \\% ha; Anónimo Hash En la sección de arriba, necesita dos declaraciones con el fin de llegar a un hash La primera declaración da la matriz un nombre,% ha Es posible utilizar sólo una declaración a llegar a una.

. ... de hash En este caso, el hash no tendrá un nombre Se acaba de tener una referencia a la región en la memoria que tiene el hash La siguiente declaración ilustra esto: mi $ href = {Manzana => "púrpura", Plátano = > "amarillo", Pera => "verde", Limón => "verde"}; Nota aquí que tenemos llaves para delimitar los elementos de patata y soportes no curvos para la lista como antes Bajo esta condición, los tirantes devuelven una referencia (. dirección de memoria) a la hash. Esta referencia devuelta se asigna a la variable escalar, $ HREF.

Usted no necesita el \\ signo aquí, ya que el hash no tiene un nombre y \\ se debe utilizar en frente de un nombre (variable) para devolver una referencia. Nota: Cualquier variable que contiene una referencia es una variable escalar. Así que la referencia de un array o hash se celebró por una variable escalar. La referencia de un escalar aún está en manos de una variable escalar. El uso de un hash de referencia Una forma de obtener el hash de una referencia de hash (variable que contiene la referencia) es el uso de los aparatos de ortodoncia.

Para la referencia anterior, debería escribir,% {$ Aref} Puedes comenzar con el signo numeral,%, ya que se trata de un hash. Esto es seguido por tirantes. Entre las llaves, usted tiene la variable que contiene la referencia. Por lo general, no se utiliza el hash en su conjunto. Por lo general, utiliza un valor del hash. Para un hash que tiene un nombre, si usted desea utilizar el nombre de hash para obtener un valor, debería escribir algo como, {"clave"}, donde el nombre de la almohadilla (variable) es $ ha $ ha.

Cuando usted tiene una referencia al hachís, que hacer algo similar pero con las llaves de la siguiente forma: $ {"clave"} Es decir que sustituya, ha con {$ href} {$ href}. La otra forma de acceder a un hash es aplicable cuando se desea un elemento de la almohadilla (esto es lo que hace la mayoría de las veces). Con este modo, no se empieza con el signo escalar anterior, $. También omite las llaves.

Sin embargo, usted sigue la variable de referencia de matriz, con una flecha, ->, como en el siguiente ejemplo: $ href -> {'clave'} Usando esta manera no depende de si la referencia de hash era de un hash que tiene un nombre o un hash anónimo. Lea y probar el siguiente código: use strict; print "Content-Type: text /html \\ n \\ n"; mi% ha = (Apple => "púrpura", Plátano => "amarillo", Pera => "verde", Limón => "verde"); mi $ href = \\% ha; print $ {$ href} {"Apple"}; print "mi $ haRef = {Manzana =>" púrpura ", Plátano =>" amarillo ", Pera =>" verde ", Limón =>" verde "}; imprimir $ haRef -> {'plátano'}; Pass Alegatos de La referencia a una Subrutina Lea y tratar el siguiente código: use strict; imprimir "Content-Type: text /html \\ n \\ n"; mi% ha = (Apple => "púrpura", Plátano => "amarilla"); sub mySub {print $ _ [0], "", $ _ [1], "", $ _ [2], "", $ _ [3], "", $ _ [4], "", $ _ [5], "";} mySub ("uno", "dos",% ha); En la llamada de función, el primer argumento es "uno", el segundo argumento es "dos" y el tercer argumento es% ha.

Tan pronto como la definición de la función comienza la ejecución, "uno" se convierte en el primer valor de_; "dos" se convierte en el segundo argumento de_ Entonces los artículos del hash se acoplan a cabo en el resto de los valores de_:. En mi equipo, Apple se convierte en el quinto valor de_ y esto no es una buena idea ya que Apple es en realidad una clave hash. púrpura se convierte en el sexto valor de_ en mi ordenador. plátano se convierte en el tercer valor de_ en mi ordenador . En mi equipo, amarillo se convierte en el cuarto valor de_.

Tenga en cuenta que el argumento de hash (% ha) en la función de llamada no es una referencia. Esto da lugar a dos problemas. Los artículos del hash son aplanados en el array_. Además, los elementos de hash en el_ matriz no están en el orden, se escribieron en la creación del hash. Un problema similar se produce con la matriz. Para resolver este problema, que es mantener la estructura de un hash o matriz cuando se pasa a una función, usted tiene que pasar el hash o matriz por referencia. El siguiente código ilustra esto.

use strict; print "Content-Type: text /html \\ n \\ n"; mi% ha = (Apple => "púrpura", Plátano => "amarilla"); sub mySub {print $ _ [0], "", $ _ [1], "", $ _ [2] -> {"Apple"}, "", $ _ [2] -> {'plátano'} ; } MySub ("uno", "dos", \\% ha); El tercer argumento en la llamada a la función es una referencia al hash. Esto se logró mediante la que precede al nombre de la variable hash con \\ en el paréntesis de los argumentos. En la ejecución de la definición de la función, sólo hay tres valores para la matriz_ ahora.

El primer valor de la matriz es el primer argumento en la llamada a la función; Eso está bien. El segundo valor de la matriz es el segundo argumento de la llamada a la función; Eso está bien. Ahora, el tercer valor de la matriz es una referencia a el hash; que se acepta. A partir de esta referencia, puede obtener todos los valores del hash. Observe cómo se consiguieron los dos valores de hash en la definición de la función anterior.

Cuando se pasa una matriz o un hash como argumento normalmente a una función, usted termina con dos copias de los elementos de la matriz o de hash: una copia de los elementos permanece en la variable array o hash. La otra copia de los artículos están en la matriz_, cuando la función es llamada. En el código anterior, la estructura de la almohadilla se ha mantenido y tiene sólo una copia de los artículos de patata, que son los de el hash creado (definido). El hash original con su estructura es, por supuesto, mantiene.

Si asignó la referencia de hash a una variable (escalar), aún puede utilizar la variable (que mantiene la referencia) como argumento en la llamada a la función. El siguiente código ilustra esto: usar estricta; print "Content-Type: text /html \\ n \\ n"; mi% ha = (Apple => "púrpura", Plátano => "amarilla"); mi $ href = \\% ha; sub mySub {print $ _ [0], "", $ _ [1], "", $ _ [2] -> {"Apple"}, "", $ _ [2] ->

Page   <<       [1] [2] [3] [4] [5] [6] [7] >>
Copyright © 2008 - 2016 Lectura Educación Artículos,https://lectura.nmjjxx.com All rights reserved.