Cada línea de salida consta de una lista de palabras

Estas líneas tienen que ser ordenadas mediante una lista alfabética de ordenación que utiliza la sub-cadena a partir de la palabra clave. La palabra clave se inicia después de la columna 50, por lo que requieren una especial rutina auxiliar tipo que escoge estos sub-cadenas. La rutina de clase es similar a la numeric_sort ilustrado antes. Se basa en la convención de que, antes de llamar a la rutina, las variables globales $ a y $ b se han asignado los dos elementos de datos (en este caso las líneas de informe) que han de compararse.

by_keystr sub (my $ str1 = substr ($ a, 50); my $ str2 = substr ($ b, 50); if ($ str1 lt $ str2) (return -1;) elsif ($ str1 eq $ str2) ( return 0;) else (return 1;))
  

Esta subrutina requiere que las variables locales para almacenar los dos sub-cadenas. Perl permite la declaración de variables cuyo alcance se limita al cuerpo de una función (o, en su ámbito a un bloque de interior en el que se declaran). Estas variables son declaradas con la palabra clave de mi, y aquí la función auxiliar especie tiene dos variables locales $ str1 y $ str2. Estos contienen las sub-cadenas que comienzan en la posición 50 de las dos líneas generadas. El LT y las comparaciones de la ecuación hace en estas cadenas se podría simplificar el uso del operador CMP Perl (que es una versión de cadena del operador mencionado en el contexto de la función de clasificación numérica de ayuda). El cuerpo del bucle principal, mientras trabaja por la división de la línea de entrada en una lista de palabras y entonces el procesamiento de esta lista.

while ($ title = ) (Chomp ($ title); @ Title = split / /, $ titulo, ... foreach $ i (0 .. $ # title) ($ palabra = Título [$ i]; ... ))

Cada palabra debe ser analizada para determinar si se trata de una palabra clave. Esto puede hacerse mediante una simple coincidencia de expresiones regulares. El patrón de esta expresión regular se especifica que debe haber una letra mayúscula al inicio de la cadena, celebrada en $ Word: if ($ palabra = ~ / ^ [AZ] /) (... = ~) El operador de expresiones regulares de Perl coincidentes operador, lo que se utiliza para invocar la comparación del valor de la Palabra y el $ / ^ [AZ] / patrón. Si la palabra actual se clasifica como una palabra clave, entonces las palabras antes de que se combinan para formar la cadena de inicio, y la palabra clave y el resto de palabras se combinan para formar una cadena de final. Estas cadenas pueden ser combinados para producir una línea para la salida final. Esto se logra utilizando la función sprintf (el mismo que en la biblioteca stdio C). La función sprintf crea una cadena en la memoria, devolviendo esta cadena como su resultado. Como printf, sprintf toma una cadena de formato y una lista de argumentos. Las líneas de salida que se muestra puede ser producido mediante la instrucción:

línea $ final \ n ", $ start, $ = sprintf"% 50% 50 años;

El programa completo es:

#! / usr / bin / perl sub by_keystr (my $ str1 = substr ($ a, 50); my $ str2 = substr ($ b, 50); if ($ str1 lt $ str2) (return -1;) elsif ($ str1 eq $ str2) (return 0;) else (return 1;)
) @ Recogida = (); while ($ title = ) (Chomp ($ title); @ Title = split / /, $ titulo, $ start = ""; foreach $ i (0 .. $ # title) ($ palabra = Título [$ i]; if ($ Word = ~ / ^ [AZ] /) ($ final = ""; for ($ i = $ j, $ j 

En Perl, siempre hay otro camino! Otra forma de crear la lista de finalización sería usar Perl se unen a la función:

$ end = join ',' Título [$ i .. $ # Título];

Perl se unen a la función (documentado en perlfunc) tiene dos argumentos - una expresión y una lista. Se genera una cadena uniendo las cuerdas separadas de la lista, y el valor de la expresión se utiliza como un elemento separador. Perl viene con las bibliotecas de varios miles de subrutinas, a menudo la mayor parte de su trabajo se puede hacer utilizando las rutinas existentes. Sin embargo, tendrá que definir su propia subrutina - si simplemente para poner en orden su código y evitar excesivamente grandes programas de la línea principal. Rutinas de Perl se definen como:

Nombre del bloque sub

Una rutina tiene un valor de retorno, lo que es o bien el valor de la última sentencia ejecutada o un valor determinado en una declaración explícita de retorno. Argumentos que se pasan a una rutina se combinan en una sola lista - @ _. Los argumentos pueden ser aislados por la indexación en esta lista, o mediante una lista literal como un valor-. Como se ilustra con la función auxiliar de clasificación en la última parte, las subrutinas pueden definir su propio ámbito local variables.Many más detalles de las subrutinas se dan en la parte perlsub de la documentación. Paréntesis son opcionales en las llamadas subrutina:

Process_data ($ arg1, $ arg2, $ arg3), es el mismo que Process_data $ arg1, $ arg2, $ arg3;

Una definición para la rutina de este tipo es:

octal sub (my $ str = $ _ [0]; my $ code = 0; for (my $ i = 1; $ i 

Esta subrutina puede ser invocada:

rwxr $ str = "-x ---"; $ octal código de acceso = $ str;

Para un segundo ejemplo, considere una subrutina para determinar si una cadena en particular está presente en una lista:

(miembro del elemento, lista);

Como se señaló anteriormente, los argumentos de una rutina se combinan en una sola lista, sino que tienen que ser escindido en la rutina. El tratamiento consiste en un bucle foreach que comprueba si el miembro de la lista siguiente es igual a la cadena deseada:

miembro sub (my ($ entrada, @ lista) = @ _; # separar los argumentos foreach $ memb (@ lista) (if (eq $ memb $ entrada) (return 1;))
return 0;)

En realidad, hay otra manera. No hay necesidad de inventar una subrutina miembros, ya que Perl ya posee una versión generalizada en su rutina de grep. DataList match_criterion grep Cuando se utiliza en un contexto de lista, grep produce un sub-lista con referencias a los miembros de DataList que satisfacen la prueba. Cuando se utiliza en un contexto escalar, grep devuelve el número de miembros de DataList que satisfacen los requisitos.

un artículo presentado por Jorge Martínez


Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito.
Importante: Este artículo "Cada línea de salida consta de una lista de palabras", fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.


Online: 240 users browsing the articles directory