title: Portable Network Graphics

text: La cuarta letra indica si es seguro copiar la sección en caso de que no sea reconocida, en caso de estar en minúsculas es seguro copiar la sección sin importar la cantidad de modificación que haya sufrido el fichero, si es mayúscula solo se deberán copiar si no hay secciones críticas que hayan sufrido modificaciones.


title: Portable Network Graphics

text: Un decodificador debe ser capaz de entender estas secciones para leer y renderizar un PNG:Otros atributos que pueden ser guardados en una imagen PNG son: valores de gamma, color del fondo e información textual. PNG también soporta corrección de color con el uso de sistemas de manejo del color como sRGB.La primera letra en minúsculas de estas secciones indica que no son necesarias en la especificación de PNG, la última letra en minúsculas indica que es seguro copiarlas incluso si la aplicación en cuestión no las entiende.


title: Portable Network Graphics

text: Otros atributos que pueden ser almacenados en un PNG incluyen valores de corrección gamma, color de fondo y metadatos. PNG además también utiliza la corrección de color que utilizan los sistemas de administración de color como el sRGB. Algunos programas como Adobe Photoshop disponen de este sistema.


title: Portable Network Graphics

text: Las imágenes en formato PNG pueden ser imágenes de paleta indexada o estar formadas por uno o varios canales. Si existe más de un canal, todos los canales tienen el mismo número de bits por píxel (también llamado profundidad de bits por canal). Aunque en la especificación oficial del PNG se nombra la profundidad de bits por canal, normalmente los programas de edición nombran solo la cantidad total de bits por píxel, es decir, la profundidad de color.


title: Portable Network Graphics

text: El número de canales depende de si la imagen es en escala de grises o en color y si dispone de canal alfa (también llamado canal de transparencia). La combinaciones permitidas por PNG son:Por otra parte, las imágenes indexadas disponen de un tope de 256 colores como máximo. Esta paleta de colores está almacenada con una profundidad de canal de 8 bits. La paleta no puede tener más colores que los marcados por la profundidad de bits, es decir 2=256 colores, aunque sí puede tener menos (por ejemplo, una imagen de 50 colores solo almacenará 50 entradas, evitando almacenar datos que no son utilizados).


title: Portable Network Graphics

text: La tabla expuesta a la derecha indican la profundidad de color para cada formato de imagen que soporta PNG. Esta se extrae de la profundidad de bits por canal y se multiplica por el número de canales. Las casillas en rojo representan combinaciones no soportadas. El estándar requiere que los decodificadores puedan leer todos los formatos disponibles, pero muchos editores de imagen solo pueden generar un pequeño subconjunto de ellos.


title: Portable Network Graphics

text: PNG ofrece una gran variedad de opciones de transparencia: con color verdadero o escala de grises, incluso un solo píxel puede ser declarado transparente o puede añadirse un canal alfa. Para imágenes que usan paletas se puede añadir un canal alfa en las entradas de la paleta. El número de dichos valores almacenados puede ser menor que el total de entradas en la paleta, de modo que el resto de las entradas se considerarán completamente opacas. La búsqueda de píxeles con transparencia binaria debe hacerse antes de cualquier reducción de color para evitar que algunos píxeles se conviertan en transparentes accidentalmente.


title: Portable Network Graphics

text: A diferencia de la transparencia ofrecida por GIF que solo puede tomar 2 valores (completamente transparente o completamente opaco), el canal alfa de PNG permite utilizar mayor profundidad de bits para lograr efectos de semi-transparencia, propios de objetos translúcidos. Por ejemplo, con una profundidad de 8 bits para transparencias se pueden conseguir 2 = 256 grados diferentes de transparencia, como si se tratara de un color.


title: Portable Network Graphics

text: El método de compresión utilizado por el PNG es conocido como deflación (en inglés ""). También existen métodos de filtrado. En la especificación 1.2 se define un único tipo de filtro, que incluye 5 modos de predicción del valor del píxel, que resulta muy útil para mejorar la compresión, donde se elige para cada línea de la imagen (scanline) un "método de filtrado" que predice el color de cada píxel basándose en los colores de los píxeles previos y resta al color del píxel actual, el color pronosticado. Los cinco métodos son: None, Sub, Up, Average y Paeth.


title: Portable Network Graphics

text: Estos filtros pueden reducir notablemente el tamaño final del archivo, aunque depende en gran medida de la imagen de entrada. El algoritmo de compresión puede encargarse de la adecuada elección del método que mayor reducción ofrezca.


title: Portable Network Graphics

text: El tipo de media MIME para PNG es "image/png" (aprobado el 14 de octubre de 1996).


title: Portable Network Graphics

text: APNG es una extensión de PNG que soporta animación. Este formato soporta el visionado de una sola imagen en caso de que el decodificador no entienda el archivo. Es aceptado por múltiples navegadores y tiene extensión ".png".


title: Portable Network Graphics

text: Por otro lado, MNG es un formato de imagen que soporta animación y está basado en las ideas y en algunas secciones de PNG, pero es un sistema complejo y no permite el visionado de una sola imagen en caso de no existir soporte completo en el visualizador de imágenes pertinente.PNG y JPEG son formatos que están diseñados para funciones diferentes, por lo que únicamente se puede realizar una comparación generalista:


title: Portable Network Graphics

text: Algunas versiones de algunos navegadores web presentan los valores de corrección gamma incluso cuando no están especificados en el PNG. Navegadores conocidos con problemas de visualización de PNG:El efecto final es que el color mostrado en el PNG no coincide con el esquema de color del resto de la página web. Una forma sencilla de evitar esto es volviendo a codificar el PNG truncando ciertos atributos. Algunas utilidades para tal fin:


title: Python

text: Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en la legibilidad de su código. Se trata de un lenguaje de programación multiparadigma, ya que soporta parcialmente la orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, dinámico y multiplataforma.


title: Python

text: Administrado por la Python Software Foundation, posee una licencia de código abierto, denominada Python Software Foundation License. Python se clasifica constantemente como uno de los lenguajes de programación más populares.


title: Python

text: Python fue creado a finales de los ochenta por Guido van Rossum en el Centro para las Matemáticas y la Informática (CWI, "Centrum Wiskunde & Informatica"), en los Países Bajos, como un sucesor del lenguaje de programación ABC, capaz de manejar excepciones e interactuar con el sistema operativo Amoeba.


title: Python

text: El nombre del lenguaje proviene de la afición de su creador por los humoristas británicos Monty Python.


title: Python

text: Guido Van Rossum es el principal autor de Python, y su continuo rol central en decidir la dirección de Python es reconocido, refiriéndose a él como "Benevolente Dictador Vitalicio" (en inglés: "Benevolent Dictator for Life", BDFL); sin embargo el 12 de julio de 2018 declinó de dicha situación de honor sin dejar un sucesor o sucesora y con una declaración altisonante:


title: Python

text: El 20 de febrero de 1991, van Rossum publicó el código por primera vez en alt.sources, con el número de versión 0.9.0. En esta etapa del desarrollo ya estaban presentes clases con herencia, manejo de excepciones, funciones y los tipos modulares, como: codice_1, codice_2, codice_3, entre otros. Además en este lanzamiento inicial aparecía un sistema de módulos adoptado de Modula-3; van Rossum describe el módulo como «una de las mayores unidades de programación de Python». El modelo de excepciones en Python es parecido al de Modula-3, con la adición de una cláusula codice_4. En el año 1994 se formó comp.lang.python, el foro de discusión principal de Python, marcando un hito en el crecimiento del grupo de usuarios de este lenguaje.


title: Python

text: Python alcanzó la versión 1.0 en enero de 1994. Una característica de este lanzamiento fueron las herramientas de la programación funcional: codice_5, codice_6, codice_7 y codice_8. Van Rossum explicó que «hace 12 años, Python adquirió lambda, reduce(), filter() y map(), cortesía de Amrit Perm, un hacker informático de Lisp que las implementó porque las extrañaba».


title: Python

text: La última versión liberada proveniente de CWI fue Python 1.2. En 1995, van Rossum continuó su trabajo en Python en la (CNRI) en Reston, Virginia, donde lanzó varias versiones del software.


title: Python

text: Durante su estancia en CNRI, van Rossum lanzó la iniciativa "Computer Programming for Everybody" (CP4E), con el fin de hacer la programación más accesible a más gente, con un nivel de 'alfabetización' básico en lenguajes de programación, similar a la alfabetización básica en inglés y habilidades matemáticas necesarias por muchos trabajadores. Python tuvo un papel crucial en este proceso: debido a su orientación hacia una sintaxis limpia, ya era idóneo, y las metas de CP4E presentaban similitudes con su predecesor, ABC. El proyecto fue patrocinado por DARPA. En el año 2007, el proyecto CP4E está inactivo, y mientras Python intenta ser fácil de aprender y no muy arcano en su sintaxis y semántica, alcanzando a los no-programadores, no es una preocupación activa.


title: Python

text: En el año 2000, el equipo principal de desarrolladores de Python se cambió a BeOpen.com para formar el equipo BeOpen PythonLabs. CNRI pidió que la versión 1.6 fuera pública, continuando su desarrollo hasta que el equipo de desarrollo abandonó CNRI; su programa de lanzamiento y el de la versión 2.0 tenían una significativa cantidad de traslapo. Python 2.0 fue el primer y único lanzamiento de BeOpen.com. Después que Python 2.0 fuera publicado por BeOpen.com, Guido van Rossum y los otros desarrolladores de PythonLabs se unieron en Digital Creations.


title: Python

text: Python 2.0 tomó una característica mayor del lenguaje de programación funcional Haskell: listas por comprensión. La sintaxis de Python para esta construcción es muy similar a la de Haskell, salvo por la preferencia de los caracteres de puntuación en Haskell, y la preferencia de Python por palabras claves alfabéticas. Python 2.0 introdujo además un sistema de recolección de basura capaz de recolectar referencias cíclicas.


title: Python

text: Posterior a este doble lanzamiento, y después que van Rossum dejara CNRI para trabajar con desarrolladores de software comercial, quedó claro que la opción de usar Python con software disponible bajo GNU GPL era muy deseable. La licencia usada entonces, la Python License, incluía una cláusula estipulando que la licencia estaba gobernada por el estado de Virginia, por lo que, bajo la óptica de los abogados de Free Software Foundation (FSF), se hacía incompatible con GPL. Para las versiones 1.61 y 2.1, CNRI y FSF  hicieron compatibles la licencia de Python con GPL, renombrandola Python Software Foundation License. En el año 2001, van Rossum fue premiado con FSF Award for the Advancement of Free Software. Python 2.1 fue un trabajo derivado de las versiones 1.6.1 y 2.0. Es a partir de este momento que Python Software Foundation (PSF) pasa a ser dueño del proyecto, organizada como una organización sin ánimo de lucro fundada en el año 2001, tomando como modelo la Apache Software Foundation. Incluido en este lanzamiento fue una implementación del scoping más parecida a las reglas de static scoping (del cual Scheme es el originador).


title: Python

text: Una innovación mayor en Python 2.2 fue la unificación de los tipos en Python (tipos escritos en C), y clases (tipos escritos en Python) dentro de una jerarquía. Esa unificación logró un modelo de objetos de Python puro y consistente. También fueron agregados los generadores que fueron inspirados por el lenguaje Icon.


title: Python

text: Las adiciones a la biblioteca estándar de Python y las decisiones sintácticas fueron influenciadas fuertemente por Java en algunos casos: el package codice_9, introducido en la versión 2.3, está basado en log4j; el parser SAX, introducido en 2.0; el package codice_10, cuya clase "Thread" expone un subconjunto de la interfaz de la clase homónima en Java.


title: Python

text: Python 2, es decir Python 2.7.x, fue oficialmente descontinuado el 1 de enero de 2020 (primero planeado para 2015) después de lo cual no se publicarán parches de seguridad y otras mejoras para él. Con el final del ciclo de vida de Python 2, solo tienen soporte la rama Python 3.6.x y posteriores.


title: Python

text: En la actualidad, Python se aplica en los campos de inteligencia artificial y "machine learning".


title: Python

text: Python es un lenguaje de programación multiparadigma. Esto significa que más que forzar a los programadores a adoptar un estilo particular de programación, permite varios estilos: programación orientada a objetos, programación imperativa y programación funcional. Otros paradigmas están soportados mediante el uso de extensiones.


title: Python

text: Python usa tipado dinámico y conteo de referencias para la gestión de memoria.


title: Python

text: Una característica importante de Python es la resolución dinámica de nombres; es decir, lo que enlaza un método y un nombre de variable durante la ejecución del programa (también llamado enlace dinámico de métodos).


title: Python

text: Otro objetivo del diseño del lenguaje es la facilidad de extensión. Se pueden escribir nuevos módulos fácilmente en C o C++. Python puede incluirse en aplicaciones que necesitan una interfaz programable.


title: Python

text: Aunque la programación en Python podría considerarse en algunas situaciones hostil a la programación funcional tradicional del Lisp, existen bastantes analogías entre Python y los lenguajes minimalistas de la familia Lisp como puede ser Scheme.


title: Python

text: Los usuarios de Python se refieren a menudo a la filosofía de Python que es bastante análoga a la filosofía de Unix. El código que siga los principios de Python se dice que es "pythónico". Estos principios fueron descritos por el desarrollador de Python Tim Peters en El Zen de Python


title: Python

text: Desde la versión 2.1.2, Python incluye estos puntos (en su versión original en inglés) como un huevo de pascua que se muestra al ejecutar codice_11.


title: Python

text: El intérprete de Python estándar incluye un "modo interactivo" en el cual se escriben las instrucciones en una especie de intérprete de comandos: las expresiones pueden ser introducidas una a una, pudiendo verse el resultado de su evaluación inmediatamente, lo que da la posibilidad de probar porciones de código en el modo interactivo antes de integrarlo como parte de un programa. Esto resulta útil tanto para las personas que se están familiarizando con el lenguaje como para los programadores más avanzados.


title: Python

text: Existen otros programas, tales como IDLE, bpython o IPython, que añaden funcionalidades extra al modo interactivo, como la compleción automática de código y el coloreado de la sintaxis del lenguaje.


title: Python

text: Ejemplo del modo interactivo: »> 1 + 1 2 »> a = range(10) »> print(list(a)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


title: Python

text: Python está destinado a ser un lenguaje de fácil lectura. Su formato es visualmente ordenado y, a menudo, usa palabras clave en inglés donde otros idiomas usan puntuación. A diferencia de muchos otros lenguajes, no utiliza corchetes para delimitar bloques y se permiten puntos y coma después de las declaraciones, pero rara vez, si es que alguna vez, se utilizan. Tiene menos excepciones sintácticas y casos especiales que C o Pascal.


title: Python

text: Diseñado para ser leído con facilidad, una de sus características es el uso de palabras donde otros lenguajes utilizarían símbolos. Por ejemplo, los operadores lógicos codice_12, codice_13 y codice_14 en Python se escriben codice_15, codice_16 y codice_17, respectivamente. Curiosamente el lenguaje Pascal es junto con COBOL uno de los lenguajes con muy clara sintaxis y ambos son de la década del 70. La idea del código claro y legible no es algo nuevo.


title: Python

text: El contenido de los bloques de código (bucles, funciones, clases, etc.) es delimitado mediante espacios o tabuladores, conocidos como indentación, antes de cada línea de órdenes pertenecientes al bloque. Python se diferencia así de otros lenguajes de programación que mantienen como costumbre declarar los bloques mediante un conjunto de caracteres, normalmente entre llaves codice_18. Se pueden utilizar tanto espacios como tabuladores para sangrar el código, pero se recomienda no mezclarlos.


title: Python

text: Debido al significado sintáctico de la sangría, cada instrucción debe estar contenida en una sola línea. No obstante, si por legibilidad se quiere dividir la instrucción en varias líneas, añadiendo una barra invertida codice_19 al final de una línea, se indica que la instrucción continúa en la siguiente.


title: Python

text: Estas instrucciones son equivalentes:


title: Python

text: Los "comentarios" se pueden poner de dos formas. La primera y más apropiada para comentarios largos es utilizando la notación  comentario , tres apóstrofos de apertura y tres de cierre. La segunda notación utiliza el símbolo codice_20, y se extienden hasta el final de la línea.


title: Python

text: El intérprete no tiene en cuenta los "comentarios", lo cual es útil si deseamos poner información adicional en el código. Por ejemplo, una explicación sobre el comportamiento de una sección del programa.


title: Python

text: Comentario más largo en una línea en Python


title: Python

text: print("Hola mundo") # También es posible añadir un comentario al final de una línea de código


title: Python

text: Las "variables" se definen de forma dinámica, lo que significa que no se tiene que especificar cuál es su tipo de antemano y puede tomar distintos valores en otro momento, incluso de un tipo diferente al que tenía previamente. Se usa el símbolo codice_21 para asignar valores. x = 1 x = "texto" # Esto es posible porque los tipos son asignados dinámicamente Los nombres de variables pueden contener números y letras pero deben comenzar por una letra, además existen 28 palabras reservadas: Los "tipos de datos" se pueden resumir en esta tabla:Una sentencia condicional ("if") ejecuta su bloque de código interno solo si se cumple cierta condición. Se define usando la palabra clave codice_37 seguida de la condición, y el bloque de código. Condiciones adicionales, si las hay, se introducen usando codice_29 seguida de la condición y su bloque de código. Todas las condiciones se evalúan secuencialmente hasta encontrar la primera que sea verdadera, y su bloque de código asociado es el único que se ejecuta. Opcionalmente, puede haber un bloque final (la palabra clave codice_4 seguida de un bloque de código) que se ejecuta solo cuando todas las condiciones fueron falsas. »> verdadero = True »> if verdadero: # No es necesario poner "verdadero == True" ... print("Verdadero") ... else: ... print("Falso") Verdadero »> lenguaje = "Python" »> if lenguaje == "C": # lenguaje no es "C", por lo que este bloque se obviará y evaluará la siguiente condición ... print("Lenguaje de programación: C") ... elif lenguaje == "Python": # Se pueden añadir tantos bloques "elif" como se quiera ... print("Lenguaje de programación: Python") ... else: # En caso de que ninguna de las anteriores condiciones fuera cierta, se ejecutaría este bloque ... print("Lenguaje de programación: indefinido") Lenguaje de programación: Python »> if verdadero and lenguaje == "Python": # Uso de "and" para comprobar que ambas condiciones son verdaderas ... print("Verdadero y Lenguaje de programación: Python") Verdadero y Lenguaje de programación: Python


title: Python

text: El bucle "for" es similar a "foreach" en otros lenguajes. Recorre un objeto iterable, como una "lista", una "tupla" o un generador, y por cada elemento del iterable ejecuta el bloque de código interno. Se define con la palabra clave codice_34 seguida de un nombre de variable, seguido de codice_39, seguido del iterable, y finalmente el bloque de código interno. En cada iteración, el elemento siguiente del iterable se asigna al nombre de variable especificado: »> lista = ["a", "b", "c"] »> for i in lista: # Iteramos sobre una lista, que es iterable ... print(i) a b c »> cadena = "abcdef" »> for i in cadena: # Iteramos sobre una cadena, que también es iterable ... print(i, end=', ') # Añadiendo end=', ' al final hacemos que no introduzca un salto de línea, sino una coma y un espacio a, b, c, d, e, f,


title: Python

text: El bucle "while" evalúa una condición y, si es verdadera, ejecuta el bloque de código interno. Continúa evaluando y ejecutando mientras la condición sea verdadera. Se define con la palabra clave codice_49 seguida de la condición, y a continuación el bloque de código interno: »> numero = 0 »> while numero < 10: ... print(numero, end=" ") ... numero += 1 # Un buen programador modificará las variables de control al finalizar el ciclo while 0 1 2 3 4 5 6 7 8 9  »> lista = ["abc", 42, 3.1415] »> lista[0] # Acceder a un elemento por su índice 'abc' »> lista[-1] # Acceder a un elemento usando un índice negativo 3.1415 »> lista.append(True) # Añadir un elemento al final de la lista »> lista ['abc', 42, 3.1415, True] »> del lista[3] # Borra un elemento de la lista usando un índice (en este caso: True) »> lista[0] = "xyz" # Re-asignar el valor del primer elemento de la lista »> lista[0:2] # Mostrar los elementos de la lista del índice "0" al "2" (sin incluir este último) ['xyz', 42] »> lista_anidada = [lista, [True, 42L]] # Es posible anidar listas »> lista_anidada 'xyz', 42, 3.1415], [True, 42L »> lista_anidada[1][0] # Acceder a un elemento de una lista dentro de otra lista (del segundo elemento, mostrar el primer elemento) True


title: Python

text: »> tupla = ("abc", 42, 3.1415) »> tupla[0] # Acceder a un elemento por su índice 'abc' »> del tupla[0] # No es posible borrar (ni añadir) un elemento en una tupla, lo que provocará una excepción »> tupla[0] = "xyz" # Tampoco es posible re-asignar el valor de un elemento en una tupla, lo que también provocará una excepción »> tupla[0:2] # Mostrar los elementos de la tupla del índice "0" al "2" (sin incluir este último) »> tupla_anidada = (tupla, (True, 3.1415)) # También es posible anidar tuplas »> 1, 2, 3, "abc" # Esto también es una tupla, aunque es recomendable ponerla entre paréntesis (recuerda que requiere, al menos, una coma) »> (1) # Aunque entre paréntesis, esto no es una tupla, ya que no posee al menos una coma, por lo que únicamente aparecerá el valor 1 »> (1,) # En cambio, en este otro caso, sí es una tupla »> (1, 2) # Con más de un elemento no es necesaria la coma final »> (1, 2,) # Aunque agregarla no modifica el resultado


title: Python

text: »> diccionario = {"cadena": "abc", "numero": 42, "lista": [True, 42L]} # Diccionario que tiene diferentes valores por cada clave, incluso una lista »> diccionario["cadena"] # Usando una clave, se accede a su valor 'abc' »> diccionario["lista"][0] # Acceder a un elemento de una lista dentro de un valor (del valor de la clave "lista", mostrar el primer elemento) True »> diccionario["cadena"] = "xyz" # Re-asignar el valor de una clave »> diccionario["cadena"] 'xyz' »> diccionario["decimal"] = 3.1415927 # Insertar un nuevo elemento clave:valor »> diccionario["decimal"] 3.1415927 »> diccionario_mixto = {"tupla": (True, 3.1415), "diccionario": diccionario} # También es posible que un valor sea un diccionario »> diccionario_mixto["diccionario"]["lista"][1] # Acceder a un elemento dentro de una lista, que se encuentra dentro de un diccionario 42L »> diccionario = {("abc",): 42} # Sí es posible que una clave sea una tupla, pues es inmutable »> diccionario = {["abc"]: 42} # No es posible que una clave sea una lista, pues es mutable, lo que provocará una excepción Python cuenta con la estructura switch-case desde la versión 3.10. Esta tiene el nombre de Structural Pattern Matching. match variable: Cabe destacar que esta funcionalidad es considerablemente más compleja que el conocido switch-case de la mayoría de lenguajes, ya que no solo permite realizar una comparación del valor, si no que también puede comprobar el tipo del objeto, y sus atributos. Además que también puede realizar un desempaquetado directo de secuencias de datos, y comprobarlos de forma específica. En en siguiente ejemplo, se comprueban los atributos de nuestra instancia de codice_66. Si estos no son iguales a codice_67 e codice_68, se pasará a la siguiente condición. Es importante anotar que codice_69 no está construyendo un nuevo objeto, aunque pueda parecerlo. from dataclasses import dataclass


title: Python

text: @dataclass class Punto:


title: Python

text: coordenada = Punto(10, 34)


title: Python

text: match coordenada: En versiones anteriores, existen diferentes formas de realizar esta operación lógica de forma similar:


title: Python

text: Podemos usar la estructura de la siguiente manera:


title: Python

text: »> if condicion1: ... hacer1 »> elif condicion2: ... hacer2 »> elif condicion3: ... hacer3 »> else: ... hacer


title: Python

text: En esa estructura se ejecutara controlando la condicion1, si no se cumple pasara a la siguiente y así sucesivamente hasta entrar en el else. Un ejemplo práctico sería:


title: Python

text: »> def calculo(op,a,b): ... if 'sum' == op: ... return a + b ... elif 'rest' == op: ... return a - b ... elif 'mult' == op: ... return a * b ... elif 'div' == op: ... return a/b ... else: ... return None »> print(calculo('sum',3,4)) 7


title: Python

text: Podríamos decir que el lado negativo de la sentencia armada con if, elif y else es que si la lista de posibles operaciones es muy larga, las tiene que recorrer una por una hasta llegar a la correcta.


title: Python

text: Podemos usar un diccionario para el mismo ejemplo: »> def calculo(op,a,b): ... return { ... 'sum': lambda: a + b, ... 'rest': lambda: a - b, ... 'mult': lambda: a * b, ... 'div': lambda: a/b ... }.get(op, lambda: None)() »> print(calculo('sum',3,4)) 7 De esta manera, si las opciones fueran muchas, no recorrería todas; solo iría directamente a la operación buscada en la última línea ".get(op, lambda: None)()" estamos dando la opción por defecto.


title: Python

text: »> conjunto_inmutable = frozenset(["a", "b", "a"]) # Se utiliza una lista como objeto iterable »> conjunto_inmutable frozenset(['a', 'b']) »> conjunto1 = set(["a", "b", "a"]) # Primer conjunto mutable »> conjunto1 set(['a', 'b']) »> conjunto2 = set(["a", "b", "c", "d"]) # Segundo conjunto mutable »> conjunto2 set(['a', 'c', 'b', 'd']) # Recuerda, no mantienen el orden, como los diccionarios »> conjunto1 & conjunto2 # Intersección set(['a', 'b']) »> conjunto1 | conjunto2 # Unión set(['a', 'c', 'b', 'd']) »> conjunto1 - conjunto2 # Diferencia (1) set([]) »> conjunto2 - conjunto1 # Diferencia (2) set(['c', 'd']) »> conjunto1 ^ conjunto2 # Diferencia simétrica set(['c', 'd']) Una "lista por comprensión" (en inglés: list comprehension) es una expresión compacta para definir "listas". Al igual que codice_41, aparece en lenguajes funcionales. Ejemplos: »> range(5) # La función "range" devuelve una lista, empezando en 0 y terminando con el número indicado menos uno [0, 1, 2, 3, 4] »> [i*i for i in range(5)] # Por cada elemento del rango, lo multiplica por sí mismo y lo agrega al resultado [0, 1, 4, 9, 16] »> lista = [(i, i + 2) for i in range(5)] »> lista [(0, 2), (1, 3), (2, 4), (3, 5), (4, 6)]codice_27:


title: Python

text: »> def suma(x, y=2): ... return x + y # Retornar la suma del valor de la variable "x" y el valor de "y" »> suma(4) # La variable "y" no se modifica, siendo su valor: 2 6 »> suma(4, 10) # La variable "y" sí se modifica, siendo su nuevo valor: 10 14 codice_41:


title: Python

text: »> suma = lambda x, y=2: x + y »> suma(4) # La variable "y" no se modifica, siendo su valor: 2 6 »> suma(4, 10) # La variable "y" sí se modifica, siendo su nuevo valor: 10 14


title: Python

text: »> class Persona(): ... def __init__(self, nombre, edad): ... self.nombre = nombre # Un atributo cualquiera ... self.edad = edad # Otro atributo cualquiera ... def mostrar_edad(self): # Es necesario que, al menos, tenga un parámetro, generalmente: "self" ... print(self.edad) # mostrando un atributo ... def modificar_edad(self, edad): # Modificando Edad ... if edad < 0 or edad > 150: # Se comprueba que la edad no sea menor de 0 (algo imposible), ni mayor de 150 (algo realmente difícil) ... return False ... else: # Si está en el rango 0-150, entonces se modifica la variable ... self.edad = edad # Se modifica la edad »> p = Persona('Alicia', 20) # Instanciar la clase, como se puede ver, no se especifica el valor de "self" »> p.nombre # La variable "nombre" del objeto sí es accesible desde fuera 'Alicia' »> p.nombre = 'Andrea' # Y por tanto, se puede cambiar su contenido »> p.nombre 'Andrea' »> p.mostrar_edad() # Se llama a un método de la clase 20 »> p.modificar_edad(21) # Es posible cambiar la edad usando el método específico que hemos hecho para hacerlo de forma controlada »> p.mostrar_edad() 21


title: Python

text: Existen muchas propiedades que se pueden agregar al lenguaje importando módulos, que son "minicódigos" (la mayoría escritos también en Python) que proveen de ciertas funciones y clases para realizar determinadas tareas. Un ejemplo es el módulo Tkinter, que permite crear interfaces gráficas basadas en la biblioteca Tk. Otro ejemplo es el módulo "os", que provee acceso a muchas funciones del sistema operativo. Los módulos se agregan a los códigos escribiendo codice_38 seguida del nombre del módulo que queramos usar.


title: Python

text: La instalación de módulos en Python se puede realizar mediante la herramienta de software (suele venir incluida con las instalaciones de Python) Pip. Esta herramienta permite la gestión de los distintos paquetes o módulos instalables para Python, incluyendo así las siguientes características:El módulo os provee funciones para interactuar con el sistema operativo:


title: Python

text: »> import os # Módulo que provee funciones del sistema operativo »> os.name # Devuelve el nombre del sistema operativo 'posix' »> os.mkdir("/tmp/ejemplo") # Crea un directorio en la ruta especificada »> import time # Módulo para trabajar con fechas y horas »> time.strftime("%Y-%m-%d %H:%M:%S") # Dándole un cierto formato, devuelve la fecha y/u hora actual '2010-08-10 18:01:17' Para tareas de administración de archivos, el módulo shutil provee una interfaz de más alto nivel:


title: Python

text: »> import shutil »> shutil.copyfile('datos.db', 'informacion.db') 'informacion.db' »> shutil.move('/build/programas', 'dir_progs') 'dir_progs'


title: Python

text: El módulo glob provee una función para crear listas de archivos a partir de búsquedas con comodines en carpetas:


title: Python

text: »> import glob »> glob.glob('*.py') ['numeros.py', 'ejemplo.py', 'ejemplo2.py']


title: Python

text: Los argumentos de línea de órdenes se almacenan en el atributo argv del módulo sys como una lista.


title: Python

text: »> import sys »> print(sys.argv) ['demostracion.py', 'uno', 'dos', 'tres']


title: Python

text: El módulo math permite acceder a las funciones de matemática de punto flotante:


title: Python

text: »> import math »> math.cos(math.pi / 3) 0,494888338963 »> math.log(1024, 2) 10.0 El módulo random se utiliza para realizar selecciones al azar:


title: Python

text: »> import random »> random.choice(['durazno', 'manzana', 'frutilla']) 'durazno' »> random.sample(range(100), 10) # elección sin reemplazo [30, 23, 17, 24, 8, 81, 41, 80, 28, 13] »> random.random() # un float al azar 0.23370387692726126 »> random.randrange(6) # un entero al azar tomado de range(6) 3 El módulo statistics se utiliza para estadística básica, por ejemplo: media, mediana, varianza, etc.:


title: Python

text: »> import statistics »> datos = [1.75, 2.75, 1.25, 0.5, 0.25, 1.25, 3.5] »> statistics.mean(datos) 1.6071428571428572 »> statistics.median(datos) 1.25 »> statistics.variance(datos) 1.3720238095238095


title: Python

text: El módulo datetime permite manejar fechas y tiempos:


title: Python

text: »> from datetime import date »> hoy = date.today() »> hoy datetime.date(2017, 8, 16)


title: Python

text: El módulo turtle permite la implementación de gráficas tortuga:


title: Python

text: »> import turtle »> turtle.pensize(2) »> turtle.left(120) »> turtle.forward(100)


title: Python

text: En Python todo es un "objeto" (incluso las clases). Las "clases", al ser "objetos", son instancias de una metaclase. Python además soporta herencia múltiple y polimorfismo. »> cadena = "abc" # Una cadena es un objeto de "str" »> cadena.upper() # Al ser un objeto, posee sus propios métodos 'ABC' »> lista = [True, 3.1415] # Una lista es un objeto de "list" »> lista.append(42L) # Una lista también (al igual que todo) es un objeto, y también posee sus propios métodos »> lista [True, 3.1415, 42L] Python tiene una gran biblioteca estándar, usada para una diversidad de tareas. Esto viene de la filosofía "pilas incluidas" (""batteries included"") en referencia a los módulos de Python. Los módulos de la biblioteca estándar pueden mejorarse por módulos personalizados escritos tanto en C como en Python. Debido a la gran variedad de herramientas incluidas en la biblioteca estándar, combinada con la habilidad de usar lenguajes de bajo nivel como C y C++, los cuales son capaces de interactuar con otras bibliotecas, Python es un lenguaje que combina su clara sintaxis con el inmenso poder de lenguajes menos elegantes.


title: Python

text: Existen diversas implementaciones del lenguaje:


title: Python

text: A lo largo de su historia, Python ha presentado una serie de incidencias, de las cuales las más importantes han sido las siguientes:


title: Préstamo lingüístico

text: Un préstamo lingüístico es una palabra, morfema o expresión de un idioma que es adoptada por otro idioma. A menudo resulta de la influencia cultural de los hablantes del primer idioma sobre los del segundo. Cuando el elemento prestado es una palabra léxica, normalmente un adjetivo, un nombre o un verbo, hablamos de préstamo léxico. El préstamo léxico es de lejos el más frecuente de todos, pero también existe el préstamo gramatical, que sucede especialmente cuando un número importante de hablantes bilingües de las dos lenguas usan partículas, morfemas y elementos no léxicos de una lengua cuando se habla la otra. Otro fenómeno similar es el calco semántico, en el cual aunque no se toma una expresión literal de otro idioma, sí se toma su significado.


title: Préstamo lingüístico

text: El préstamo léxico es lingüísticamente diferente de otro fenómeno de lenguas “en contacto” llamado calco léxico. En el primer caso, la forma fonética original es simplemente amoldada a la fonología de la lengua receptora sin interpretación o traducción. En el segundo caso existe una adaptación semántica, interpretación o traducción de los morfemas que componían la forma original.


title: Préstamo lingüístico

text: El término "préstamo" está asimismo relacionado con el término "extranjerismo": un préstamo es un extranjerismo incorporado al sistema lingüístico de una lengua determinada.


title: Préstamo lingüístico

text: También podemos hablar de "préstamo" para referirnos a palabras que dentro de una misma lengua pasan de una jerga especializada al registro estándar o viceversa.


title: Préstamo lingüístico

text: En los préstamos lingüísticos se pueden distinguir cuatro tipos, según el grado de adaptación y necesidad de la palabra:


title: Préstamo lingüístico

text: Las comunidades idiomáticas toman formas léxicas de otras lenguas, para describir realidades que en una cultura aparecen por primera vez, pero en la otra son frecuentes y ya poseen un término forjado, términos prestados o préstamos léxicos.


title: Préstamo lingüístico

text: Así, por ejemplo, los conquistadores españoles entraron en contacto en América con fenómenos que bautizaron utilizando palabras indígenas como "hamaca", "patata", "maíz", "huracán", "cacique", "hule" o "tabaco". El espectáculo de desnudarse con gracia, que no tenía equivalente en las costumbres de los países de habla española, exigió el crudo anglicismo "strip-tease" e inversamente, los franceses usaron el calco semántico o traducción de la palabra española "olla podrida" para describir el plato de cocina de ese origen que llaman "pot-pourri", palabra que volvió a España como término popular para denominar lo que es variopinto y multiforme, "popurrí".


title: Préstamo lingüístico

text: Suele producirse en comunidades lingüísticas con un alto grado de bilingüismo. Muchos de los rasgos comunes de las áreas lingüísticas podrían ser resultado del préstamo gramatical; por ejemplo, en el área lingüística balcánica varias lenguas de subfamilias diferentes e ininteligibles entre sí tienen artículos pospuestos y oraciones subordinadas con complementador.


title: Perl

text: Perl es un lenguaje de programación diseñado por Larry Wall en 1987. Perl toma características del lenguaje C, del lenguaje interpretado bourne shell (sh), AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.


title: Perl

text: Estructuralmente, Perl está basado en un estilo de bloques como los del C o AWK, y fue ampliamente adoptado por su destreza en el procesado de texto y no tener ninguna de las limitaciones de los otros lenguajes de script.


title: Perl

text: Larry Wall comenzó a trabajar en Perl en 1987 mientras trabajaba como programador en Unisys y anunció la versión 1.0 en el grupo de noticias comp.sources.misc el 18 de diciembre de 1987. El lenguaje se expandió rápidamente en los siguientes años. Perl 2, publicado en 1988, aportó un mejor motor de expresiones regulares. Perl 3, publicado en 1989, añadió soporte para datos binarios.


title: Perl

text: Hasta 1991 la única documentación de Perl era una simple (y cada vez más larga) página de manual Unix. En 1991 se publicó  "Programming Perl" (el libro del camello) y se convirtió en la referencia "de facto" del lenguaje. Al mismo tiempo, el número de versión de Perl saltó a 4, no por marcar un gran cambio en el lenguaje, sino por identificar a la versión que estaba documentada en el libro.


title: Perl

text: Perl 4 trajo consigo una serie de lanzamientos de mantenimiento, culminando en Perl 4.036 en 1993. En este punto, Larry Wall abandonó Perl 4 para comenzar a trabajar en Perl 5. Perl 4 se quedaría en esa versión hasta hoy.


title: Perl

text: El desarrollo de Perl 5 continuó en 1994. La lista de correo "perl5-porters" se estableció en mayo de 1994 para coordinar el trabajo de adaptación de Perl 5 a diferentes plataformas. Es el primer foro para desarrollo, mantenimiento y adaptación de Perl 5.


title: Perl

text: Perl 5 fue publicado el 17 de octubre de 1994. Fue casi una completa reescritura del intérprete y añadió muchas nuevas características al lenguaje, incluyendo objetos, referencias, paquetes y módulos. A destacar, los módulos proveen de un mecanismo para extender el lenguaje sin modificar el intérprete. Esto permitió estabilizar su núcleo principal, además de permitir a los programadores de Perl añadirle nuevas características. El 26 de octubre de 1995, se creó el "Comprehensive Perl Archive Network" (CPAN). CPAN es una colección de sitios web que almacenan y distribuyen fuentes en Perl, binarios, documentación, scripts y módulos. Originalmente, cada sitio CPAN debía ser accedido a través de su propio URL; hoy en día, http://www.cpan.org redirige automáticamente a uno de los cientos de repositorios espejo de CPAN.


title: Perl

text: En 2008, Perl 5 continúa siendo mantenido. Características importantes y algunas construcciones esenciales han sido añadidas, incluyendo soporte Unicode, hilos, un soporte importante para la programación orientada a objetos y otras mejoras.


title: Perl

text: Perl se llamó originalmente "Pearl". Larry Wall quería darle al lenguaje un nombre corto con connotaciones positivas; asegura que miró (y rechazó) todas las combinaciones de tres y cuatro letras del diccionario. También consideró nombrarlo como su esposa Gloria. Wall descubrió antes del lanzamiento oficial que ya existía un lenguaje de programación llamado PEARL y cambió la ortografía del nombre.


title: Perl

text: El nombre normalmente comienza con mayúscula ("Perl") cuando se refiere al lenguaje y con minúscula ("perl") cuando se refiere al propio programa intérprete debido a que los sistemas de ficheros Unix distinguen mayúsculas y minúsculas. Antes del lanzamiento de la primera edición de "Programming Perl" era común referirse al lenguaje como "perl"; Randal L. Schwartz, sin embargo, forzó el nombre en mayúscula en el libro para que destacara mejor cuando fuera impreso. La distinción fue subsiguientemente adoptada por la comunidad.


title: Perl

text: El nombre es descrito ocasionalmente como "PERL" (por Practical Extraction and Report Language - "Lenguaje Práctico para la Extracción e Informe"). Aunque esta expansión ha prevalecido en muchos manuales actuales, incluyendo la página de manual de Perl, es un retroacrónimo y oficialmente el nombre no quiere decir nada. La ortografía de PERL en mayúsculas es por eso usada como jerga para detectar a individuos ajenos a la comunidad. Sin embargo, se han sugerido varios retroacrónimos, incluyendo el cómico "Pathologically Eclectic Rubbish Lister" (Contabilizador de Basura Patológicamente Ecléctico).


title: Perl

text: Perl se simboliza generalmente por un camello de una sola joroba (camello arábigo o dromedario), que fue la imagen elegida por el editor O'Reilly para la cubierta de "Programming Perl", que por consiguiente adquirió el nombre de "El Libro del Camello". O'Reilly es propietario de este símbolo como marca registrada, pero dice que usa sus derechos legales solo para proteger la ""integridad e impacto de este símbolo"". O'Reilly permite el uso no comercial del símbolo, y ofrece logos Programming Republic of Perl y botones Powered by Perl.


title: Perl

text: Desde hace unos años, y para evitar este tipo de problemas con la licencia comercial, la Fundación Perl elaboró nuevos logotipos basados en una cebolla, a raíz de las conferencias anuales que Larry Wall ofrece con el título: "State of the Onion" ("Estado de la Cebolla") "Onion" se pronuncia muy parecido a "Union", por lo que suena parecido a "State of the Union" ("Estado de la Unión"), evento en el cual el presidente de los Estados Unidos informa a los ciudadanos del estado en que se encuentra su país.


title: Perl

text: La página de manual Unix perlintro(1) dice:


title: Perl

text: La estructura completa de Perl deriva ampliamente del lenguaje C. Perl es un lenguaje imperativo, con variables, expresiones, asignaciones, bloques de código delimitados por llaves, estructuras de control y subrutinas.


title: Perl

text: Perl también toma características de la programación shell. Todas las variables son marcadas con un Sigilo precedente ("Sigil", en inglés). Los sigilos identifican inequívocamente los nombres de las variables, permitiendo a Perl tener una rica sintaxis. Notablemente, los sigilos permiten interpolar variables directamente dentro de las cadenas de caracteres ("string"). Como en los shell, Perl tiene muchas funciones integradas para tareas comunes y para acceder a los recursos del sistema.


title: Perl

text: Perl toma las listas del Lisp, "hash" (memoria asociativa) del AWK y expresiones regulares del sed. Todo esto simplifica y facilita todas las formas del análisis sintáctico, manejo de texto y tareas de gestión de datos.


title: Perl

text: En Perl 5, se añadieron características para soportar estructuras de datos complejas, funciones de primer orden (p. e. clausuras como valores) y un modelo de programación orientada a objetos. Estos incluyen referencias, paquetes y una ejecución de métodos basada en clases y la introducción de variables de ámbito léxico, que hizo más fácil escribir código robusto (junto con el pragma strict). Una característica principal introducida en Perl 5 fue la habilidad de empaquetar código reutilizable como módulos. Larry Wall indicó más adelante que "la intención del sistema de módulos de Perl 5 era apoyar el crecimiento de la cultura Perl en vez del núcleo de Perl".


title: Perl

text: Todas las versiones de Perl hacen el tipificado automático de datos y la gestión de memoria. El intérprete conoce el tipo y requerimientos de almacenamiento de cada objeto en el programa; reserva y libera espacio para ellos según sea necesario. Las conversiones legales de tipo se hacen de forma automática en tiempo de ejecución; las conversiones ilegales son consideradas errores fatales.


title: Perl

text: El diseño de Perl puede ser entendido como una respuesta a tres amplias tendencias de la industria informática: rebaja de los costes en el hardware, aumento de los costes laborales y las mejoras en la tecnología de compiladores. Anteriormente, muchos lenguajes de ordenador como Fortran y C, fueron diseñados para hacer un uso eficiente de un hardware caro. En contraste, Perl es diseñado para hacer un uso eficiente de los costosos programadores de ordenador.


title: Perl

text: Perl tiene muchas características que facilitan la tarea del programador a costa de unos requerimientos de CPU y memoria mayores. Estas incluyen gestión de memoria automática; tipo de dato dinámico; "strings", listas y "hashes"; expresiones regulares; introspección y una función codice_1.


title: Perl

text: Larry Wall fue adiestrado como lingüista y el diseño de Perl ha sido muy aleccionado con principios lingüísticos. Ejemplos incluyen la Codificación Huffman (las construcciones más comunes deben ser las más cortas), buena distribución (la información importante debe ir primero) y una larga colección de primitivas del lenguaje. Perl favorece las construcciones del lenguaje, tan naturales, como para los humanos son la lectura y la escritura, incluso si eso hace más complicado al intérprete Perl.


title: Perl

text: La sintaxis de Perl refleja la idea de que "cosas que son diferentes deben parecer diferentes". Por ejemplo, escalares, "arrays" y "hashes" tienen diferente sigilo. Índices de "array" y claves "hash" usan diferentes clases de paréntesis. "Strings" y expresiones regulares tienen diferentes delimitadores estándar. Esta aproximación puede contrastarse con lenguajes como Lisp, donde la misma construcción "S-expresión" y sintaxis básica se usa para muchos y variados propósitos.


title: Perl

text: Perl tiene características que soportan una variedad de paradigmas de programación, como la imperativa, funcional y la orientada a objetos. Al mismo tiempo, Perl no obliga a seguir ningún paradigma en particular, ni obliga al programador a elegir alguna de ellas.


title: Perl

text: Hay un amplio sentido de lo práctico, tanto en el lenguaje Perl como en la comunidad y la cultura que lo rodean. El prefacio de "Programming Perl" comienza con, "Perl es un lenguaje para tener tu trabajo terminado". Una consecuencia de esto es que Perl no es un lenguaje ordenado. Incluye características si la gente las usa, tolera excepciones a las reglas y emplea la heurística para resolver ambigüedades sintácticas. Debido a la naturaleza indulgente del compilador, a veces los errores pueden ser difíciles de encontrar. Hablando del variado comportamiento de las funciones internas en los contextos de lista y escalar, la página de manual de codice_2 dice "En general, hacen lo que tu quieras, siempre que quieras la coherencia."


title: Perl

text: Perl tiene varios lemas que transmiten aspectos de su diseño y uso. Uno es "There's more than one way to do it" (Hay más de una forma de hacerlo) (TMTOWTDI, usualmente pronunciado 'Tim Toady'). Otros son ""Perl: la motosierra del ejército Suizo de los lenguajes de programación"" y ""Límites imprecisos"". Una meta prefijada de Perl es hacer las cosas fáciles de forma fácil y las tareas difíciles, posibles. A Perl también se le ha llamado ""El esparadrapo de Internet"".


title: Perl

text: Perl tiene muchas y variadas aplicaciones, gracias a la disponibilidad de muchos módulos estándares y de terceras partes.


title: Perl

text: Se ha usado desde los primeros días del Web para escribir guiones ("scripts") CGI. Es una de las "tres Pes" (Perl, Python y PHP), que son los lenguajes más populares para la creación de aplicaciones Web, y es un componente integral de la popular solución LAMP para el desarrollo web. Grandes proyectos escritos en Perl son Slash, IMDb y UseModWiki, un motor de Wiki. Muchos sitios web con alto tráfico, como Amazon.com y Ticketmaster.com usan Perl extensamente.


title: Perl

text: Perl se usa a menudo como un "lenguaje pegamento", ligando sistemas e interfaces que no fueron diseñados específicamente para interoperar; y para el "escarbado de datos", convirtiendo o procesando grandes cantidades de datos para tareas como por ejemplo crear informes. De hecho, estas fortalezas están íntimamente unidas. Su combinación hace a Perl una popular herramienta de propósito general para los administradores de sistemas, especialmente en programas pequeños que pueden ser escritos y ejecutados en una sola línea de comandos.


title: Perl

text: Perl es también ampliamente usado en finanzas y bioinformática, donde es apreciado por su desarrollo rápido, tanto de aplicaciones como de despliegue, así como la habilidad de manejar grandes volúmenes de datos.


title: Perl

text: Perl está implementado como un intérprete, escrito en C, junto con una gran colección de módulos, escritos en Perl y C. La distribución fuente tiene, en 2005, 12 MB cuando se empaqueta y comprime en un fichero tar. El intérprete tiene 150.000 líneas de código C y se compila en un ejecutable de 1 MB en las arquitecturas de hardware más típicas. De forma alternativa, el intérprete puede ser compilado como una biblioteca y ser embebida en otros programas. Hay cerca de 500 módulos en la distribución, sumando 200.000 líneas de Perl y unas 350.000 líneas adicionales de código C. Mucho del código C en los módulos consiste en tablas de codificación de caracteres.


title: Perl

text: El intérprete tiene una arquitectura orientada a objetos. Todos los elementos del lenguaje Perl —escalares, listas, "hashes", referencias a código, manejadores de archivo— están representados en el intérprete como estructuras C. Las operaciones sobre estas estructuras están definidas como una numerosa colección de macros, typedef y funciones; esto constituye la API C de Perl. La API Perl puede ser desconcertante para el no iniciado, pero sus puntos de entrada siguen un esquema de nombres coherente, que ayuda a los que quieran utilizarla.


title: Perl

text: La ejecución de un programa Perl se puede dividir, generosamente, en dos fases: tiempo de compilación y tiempo de ejecución. En tiempo de compilación el intérprete "parsea" el texto del programa en un árbol sintáctico. En tiempo de ejecución, ejecuta el programa siguiendo el árbol. El texto es parseado solo una vez y el árbol sintáctico es optimizado antes de ser ejecutado, para que la fase de ejecución sea relativamente eficiente. Las optimizaciones del árbol sintáctico en tiempo de compilación incluyen , propagación del contexto y optimización en trozos sueltos de código. Sin embargo, las fases de compilación y ejecución pueden anidarse: un bloque codice_3 se ejecuta en tiempo de compilación, mientras que una función codice_4 inicia una compilación durante una ejecución. Ambas operaciones están implícitas en otras -de forma notable, la cláusula codice_5 que carga bibliotecas, conocidas en Perl como módulos, implica un bloque codice_3.


title: Perl

text: Perl es un lenguaje dinámico y tiene una gramática sensible al contexto que puede quedar afectada por el código ejecutado durante una fase de ejecución intermedia (Ver ejemplos.). Por eso Perl no puede ser parseado mediante una aplicación directa de analizadores sintácticos/parseadores Lex/Yacc. En cambio, el intérprete implementa su propio analizador léxico, que coordinado con un parseador modificado GNU bison resuelve las ambigüedades del lenguaje. Se ha dicho que "solo perl puede parsear Perl", queriendo decir que solo el intérprete Perl ("perl") puede parsear el lenguaje Perl ("Perl"). La razón de esto se atestigua por las persistentes imperfecciones de otros programas que emprenden la tarea de parsear Perl, como los analizadores de código y los auto-indentadores, que tienen que vérselas no solo con las muchas formas de expresar inequívocamente construcciones sintácticas, sino también con el hecho de que también Perl no puede, en general, ser parseado sin antes ser ejecutado.


title: Perl

text: El mantenimiento del intérprete Perl, a lo largo de los años, se ha vuelto cada vez más difícil. El núcleo ha estado en continuo desarrollo desde 1994. El código ha sido optimizado en rendimiento a expensas de la simplicidad, claridad y unas interfaces internas más fuertes. Nuevas características han sido añadidas, manteniendo todavía, compatibilidad virtualmente completa hacia atrás con las primeras versiones. El tamaño y la complejidad del intérprete son una barrera para los desarrolladores que desean trabajar en él.


title: Perl

text: Perl es distribuido con unos 120.000 test funcionales. Estos se ejecutan como parte del proceso normal de construcción y comprueban extensamente al intérprete y a sus módulos principales. Los desarrolladores Perl confían en los test funcionales para asegurarse que los cambios en el intérprete no introducen errores; recíprocamente, los usuarios Perl que vean al intérprete pasar los test funcionales en su sistema pueden tener un alto grado de confianza de que está funcionando adecuadamente.


title: Perl

text: No hay una especificación o estándar escrito para el lenguaje Perl y no hay planes de crear uno para la versión actual de Perl. Siempre ha existido solo una implementación del intérprete. Este intérprete, junto con los test funcionales, forman la especificación "de facto" del lenguaje.


title: Perl

text: Perl es software libre y está licenciado bajo la Licencia Artística y la GNU General Public License. Existen distribuciones disponibles para la mayoría de sistemas operativos. Está especialmente extendido en Unix y en sistemas similares, pero ha sido portado a las plataformas más modernas (y otras más obsoletas). Con solo seis excepciones confirmadas, puede ser compilado desde el código fuente en todos los Unix, compatibles POSIX o cualquier otra plataforma Unix compatible. Sin embargo, esto no es normalmente necesario, porque Perl está incluido por defecto en la instalación de los sistemas operativos más populares.


title: Perl

text: Debido a los cambios especiales necesarios para soportar al Mac OS Classic, existe una adaptación especial llamada MacPerl.


title: Perl

text: Perl está preinstalado en las distribuciones más populares de GNU/Linux incluyendo Gentoo, Slackware, Mandriva, Debian, RedHat y SUSE.


title: Perl

text: Los usuarios de Microsoft Windows normalmente instalan una distribución binaria de Perl. Compilar Perl desde el código fuente bajo Windows es posible, pero la mayoría de las instalaciones no disponen del necesario compilador de C.


title: Perl

text: La capa de emulación Cygwin proporciona otra forma de correr Perl bajo Windows. Cygwin proporciona en entorno parecido al Unix en Windows que incluye gcc, por lo que compilar Perl desde el código es una opción accesible para los usuarios que prefieren esta opción.


title: Perl

text: En junio de 2006, win32.perl.org fue lanzado por Adam Kennedy en nombre de la Fundación Perl. Es una comunidad web "para todo lo relacionado con Windows y Perl".


title: Perl

text: En Perl, el programa canónico "Hola mundo" es: print "¡Hola mundo!\n"; La primera línea contiene el "shebang" (par de caracteres que identifica el texto que sigue), que le indica al sistema operativo dónde encontrar el intérprete de Perl. La segunda imprime el "string" "¡Hola mundo!" y un carácter de nueva línea.


title: Perl

text: El "shebang" es la forma normal para invocar al intérprete en los sistemas Unix. Los sistemas Windows pueden seguir utilizándolo o pueden asociar la extensión de archivo .pl con el intérprete Perl. Algunos editores de texto también usan la línea "shebang" como una pista sobre el modo de trabajo en que deben operar. Si el programa es ejecutado por perl y no invocado por el shell, la línea que empieza por el "shebang" es parseada para interpretar las opciones. En otro caso, es ignorada. Para ver los detalles de esto, consultar la página de manual perlrun.


title: Perl

text: Perl tiene tres tipos de datos: escalares,  listas y hashes:


title: Perl

text: Todas las variables están precedidas por un sigilo, que identifica el tipo de dato que es accedido (no el tipo de dato de la misma variable). Se puede usar el mismo nombre para variables de diferentes tipos, sin que tengan conflictos.


title: Perl

text: $var # un escalar @var # un array %var # un hash


title: Perl

text: Los números se escriben de la forma usual; los "strings" están rodeados entre comillas de varias clases.


title: Perl

text: $n = 42; $nombre = "juan"; $color = 'rojo';


title: Perl

text: Perl convertirá los "strings" en números y viceversa dependiendo del contexto en que sean usados. En el siguiente ejemplo los "strings" codice_7 y codice_8 son tratados como números cuando son argumentos del operador suma. Este código imprime el número '5', desechando cualquier información no numérica de la operación y dejando los valores de las variables intactos. (El operador de concatenación no es codice_9, sino codice_10.)


title: Perl

text: $n = "3 manzanas"; $m = "2 naranjas"; print $n + $m;


title: Perl

text: Perl también tiene un contexto booleano que utiliza en la evaluación de declaraciones condicionales. Los siguientes valores en Perl evalúan todos como falso:


title: Perl

text: $falso = 0; # el número cero $falso = 0.0; # el número cero como flotante $falso = '0'; # el string cero $falso = ""; # el string vacío $falso = undef; # el valor devuelto por undef


title: Perl

text: Todos los demás valores se evalúan a verdadero. Esto incluye el curioso "string" auto-descriptivo codice_11, que de hecho es 0 como número, pero verdadero como booleano. (Cualquier "string" no numérico también tendrá esta propiedad, pero este "string" en particular es ignorado por Perl en contextos numéricos). Las expresiones booleanas evaluadas también devuelven valores escalares. Aunque la documentación no indica qué valor "particular" se devuelve como verdadero o falso (y por lo tanto no fiable), muchos operadores booleanos devuelven 1 por verdadero y el "string" vacío para falso (que evalúa a cero en contexto numérico). La función "defined()" le dice si la variable tiene algún valor. En el ejemplo anterior "defined($falso)" será verdadero con cada uno de los valores anteriores, excepto "undef". Si, específicamente, quiere asegurarse de tener un resultado 1/0 (como en C), necesita realizar el cálculo siguiente:


title: Perl

text: my $resultado_real = $resultado_booleano ? 1 : 0;


title: Perl

text: Una lista se define listando sus elementos, separados por comas y rodeados por paréntesis donde así sea requerido por la precedencia de los operadores.


title: Perl

text: @puntuaciones = (32, 45, 16, 5);


title: Perl

text: Un "hash" puede ser inicializado desde una lista de pares clave/valor.


title: Perl

text: %favorito = (


title: Perl

text: Los elementos individuales de una lista son accedidos utilizando un índice numérico, dentro de corchetes. Valores individuales en un hash son accedidos utilizando la correspondiente clave, dentro de llaves. El sigilo $ identifica que el elemento accedido es un escalar.


title: Perl

text: $puntuaciones[2] # un elemento de @puntuaciones $favorito{joe} # un valor de %favorito


title: Perl

text: Múltiples elementos pueden ser accedidos usando en su lugar el sigilo @ (identificando el resultado como una lista).


title: Perl

text: @puntuaciones[2, 3, 1] # tres elementos de @puntuaciones @favorito{'joe', 'sam'} # dos valores de %favorito


title: Perl

text: El número de elementos en un array puede ser obtenido evaluando el "array" en contexto escalar o con la ayuda del sigilo $#. Este último da el índice del último elemento dentro del "array", no el número de elementos.


title: Perl

text: $numero = @amigos; $#amigos; # el índice del último elemento en @amigos $#amigos+1; # normalmente el número de elementos en @amigos,


title: Perl

text: Hay unas pocas funciones que operan sobre "hashes" enteros.


title: Perl

text: @nombres_de_clientes = keys %direcciones; # guarda en @nombres_de_clientes todas las claves de %direcciones @direcciones_de_email = values %direcciones; # guarda en @direcciones_de_email todos los valores de %direcciones


title: Perl

text: Perl tiene varias clases de estructuras de control.


title: Perl

text: Tiene estructuras de control orientado al bloque, similar a los de los lenguajes de programación C y Java. Las condiciones están rodeadas por paréntesis y los bloques subordinados por llaves:


title: Perl

text: Cuando se controla a una sola declaración, los modificadores de declaración proporcionan una sintaxis más ligera:


title: Perl

text: Los operadores lógicos "cortocircuito" son normalmente usados para controlar el flujo del programa a nivel de expresión:


title: Perl

text: Las palabras clave de control de flujo codice_12, codice_13, codice_14 y codice_15 son expresiones, por lo que pueden ser usadas con los operadores cortocircuito.


title: Perl

text: Perl también tiene dos construcciones implícitas para bucles:


title: Perl

text: codice_16 devuelve todos los elementos de "lista" en que el bloque subordinado evalúa a verdadero. codice_17 evalúa el bloque subordinado por cada elemento de "lista" y devuelve una lista de los valores resultantes. Estas construcciones permiten un estilo simple de programación funcional.


title: Perl

text: La declaración switch (llamada "given"/"when") existe desde la versión 5.10:


title: Perl

text: Perl incluye una declaración codice_18, pero es usada raramente. Las situaciones donde en otros lenguajes se utiliza codice_19 no ocurren tan a menudo en Perl debido a sus amplias opciones de control de flujo.


title: Perl

text: Existe también una declaración codice_20 que realiza una llamada 'final'. Termina la subrutina actual e inmediatamente llama a la codice_21 especificada. Esto se usa en situaciones donde una nueva subrutina puede realizar una gestión de la pila más eficiente que el propio Perl (porque típicamente no se requiere ningún cambio en la pila actual), y en una recursión muy profunda este tipo de llamadas puede tener un sustancial impacto positivo en el funcionamiento porque evita la sobrecarga de la gestión contexto/pila en el momento de retornar.


title: Perl

text: Las subrutinas se definen con la palabra clave codice_22 e invocadas simplemente nombrándolas. Si la subrutina en cuestión no ha sido todavía declarada, es necesario, para el proceso de análisis sintáctico, poner los paréntesis.


title: Perl

text: foo(); # paréntesis necesarios aquí... foo; #... pero no aquí


title: Perl

text: Una lista de argumentos pueden ser indicados después del nombre de la subrutina. Los argumentos pueden ser escalares, listas o "hashes".


title: Perl

text: foo $x, @y, %z;


title: Perl

text: Los parámetros de una subrutina no necesitan ser declarados, ni en número ni en tipo; de hecho, pueden variar en cada llamada. Los "arrays" son expandidos a sus elementos, los "hashes" a una lista de pares clave/valor y todo el conjunto es pasado a la subrutina como una indiferenciada lista de escalares.


title: Perl

text: Cualesquiera de los argumentos pasados están disponibles para la subrutina en el "array" especial codice_23. Los elementos de codice_23 son asociados a los argumentos actuales; cambiando un elemento de codice_23 cambia el argumento correspondiente.


title: Perl

text: Los elementos de codice_23 pueden ser accedidos con los subíndices de la forma normal.


title: Perl

text: $_[0], $_[1]


title: Perl

text: Sin embargo, el código resultante puede ser difícil de leer y los parámetros tener una semántica de pase por referencia, que puede resultar algo no deseable.


title: Perl

text: Un modismo común es asignar codice_23 a una lista de variables con nombres.


title: Perl

text: my($x, $y, $z) = @_;


title: Perl

text: Esto afecta tanto a la mnemónica de los nombres de los parámetros como a la semántica de los valores pasados por valor. La palabra clave codice_28 indica que las siguientes variables están léxicamente embebidas en el bloque que las contienen.


title: Perl

text: Otro modismo es sacar los parámetros de codice_23. Esto es muy común cuando la subrutina toma un solo argumento.


title: Perl

text: my $x = shift; # Si no se dice nada, nos referimos a @_


title: Perl

text: Las subrutinas pueden devolver valores.


title: Perl

text: return 42, $x, @y, %z;


title: Perl

text: Si la subrutina no sale vía declaración codice_14, entonces devuelve la última expresión evaluada en el cuerpo de la subrutina. "Arrays" y "hashes" en el valor de retorno son expandidos a una lista de escalares, igual que si fueran argumentos de una función.


title: Perl

text: La expresión devuelta es evaluada en el contexto de la llamada de la subrutina; esto puede sorprender al desprevenido.


title: Perl

text: $x = lista; # devuelve 6 - último elemento de la lista $x = array; # devuelve 3 - número de elementos de la lista @x = lista; # devuelve (4, 5, 6) @x = array; # devuelve (4, 5, 6)


title: Perl

text: Una subrutina puede descubrir su contexto de llamada con la función codice_31.


title: Perl

text: $x = cualquiera; # devuelve "Naranjas" @x = cualquiera; # devuelve (1, 2)


title: Perl

text: El lenguaje Perl incluye una sintaxis especializada para escribir expresiones regulares y el intérprete contiene un motor para emparejar "strings" con expresiones regulares. El motor de expresiones regulares usa un algoritmo de Vuelta Atrás (), extendiendo sus capacidades desde el simple emparejamiento de patrones simples con la captura y sustitución de "strings". El motor de expresiones regulares se deriva de "regex", escrito por .


title: Perl

text: La sintaxis de expresiones regulares fue originalmente tomada de las expresiones regulares de Unix Versión 8. Sin embargo, se diferenció ya antes del primer lanzamiento de Perl y desde entonces ha ido incorporando muchas más características. Otros lenguajes y aplicaciones están adoptando las expresiones regulares de Perl (PCRE) en vez de las expresiones regulares POSIX, incluyendo PHP, Ruby, Java y el Servidor HTTP Apache.


title: Perl

text: El operador codice_32 (empareja) permite comprobar un emparejamiento por medio de una expresión regular. (Para abreviar, el precedente codice_33 puede ser omitido.) En el caso más simple, una expresión como:


title: Perl

text: $x =~ m/abc/


title: Perl

text: evalúa a verdadero si y solo si el "string" codice_34 empareja con la expresión regular codice_35.


title: Perl

text: Partes de la expresión regular pueden ser incluidas entre paréntesis: las partes correspondientes de un string emparejado son "capturadas". Los "strings" capturados son asignados de forma secuencial a las variables internas codice_36 y una lista de "strings" capturados se devuelve como valor del emparejamiento.


title: Perl

text: $x =~ m/a(.)c/; # captura el carácter entre 'a' y 'c' y lo guarda en $1


title: Perl

text: El operador codice_37 (sustitución) especifica una operación de búsqueda y reemplazo:


title: Perl

text: $x =~ s/abc/aBc/; # Convierte la b en mayúscula


title: Perl

text: Las expresiones regulares en Perl pueden tomar unos "modificadores". Son sufijos de una sola letra que modifican el significado de la expresión:


title: Perl

text: $x =~ m/abc/i; # emparejamiento independientemente de si están en mayúscula o minúscula $x =~ s/abc/aBc/g; # búsqueda y reemplazo global (a lo largo de todo el "string")


title: Perl

text: Las expresiones regulares pueden ser densas y crípticas. Esto es porque la sintaxis de las expresiones regulares es extremadamente compacta, generalmente usando caracteres sueltos o pares de caracteres que representan sus operaciones. Perl alivia un poco este problema con el modificador codice_38 que permite a los programadores poner espacio en blanco y comentarios "dentro" de las expresiones regulares:


title: Perl

text: $x =~ m/a # empareja una 'a'


title: Perl

text: Un uso común de las expresiones regulares es el de especificar delimitadores de campos al operador codice_39:


title: Perl

text: @palabras = split m/,/, $línea; # divide la $línea de valores separados por comas


title: Perl

text: El operador codice_39 complementa la captura de string. La captura de string devuelve las partes de un string que emparejan con una expresión regular; codice_39 devuelve las partes que no emparejan.


title: Perl

text: Perl está ampliamente favorecido para las aplicaciones de bases de datos. Sus facilidades de manejo de texto son buenas para generar consultas SQL; "arrays", "hashes" y la gestión de memoria automática hace fácil recoger y procesar los datos devueltos.


title: Perl

text: En las primeras versiones de Perl, las interfaces de bases de datos fueron creadas enlazando el intérprete con una biblioteca de base de datos desde el lado del cliente. Esto era algo torpe; un problema en particular fue que el ejecutable codice_42 resultante estaba restringido a usar solo una interfaz de base de datos, la que había sido enlazada. También, reenlazar el intérprete era lo suficientemente dificultoso que solo fue realizado para algunas de las más famosas e importantes bases de datos.


title: Perl

text: En Perl 5, las interfaces de bases de datos están implementadas por el módulo Perl DBI. El módulo codice_43 presenta una única interfaz a las aplicaciones Perl, independiente de las bases de datos, mientras que los módulos codice_44 (Controlador de base de datos) manejan los detalles de acceso a unas 50 bases de datos diferentes. Existen controladores codice_44 para la mayor parte de las bases de datos ANSI SQL.


title: Perl

text: El "Computer Language Shootout Benchmarks" compara el funcionamiento de implementaciones de problemas de programación típicos, en diversos lenguajes. Sus implementaciones Perl normalmente toman más memoria que las implementaciones en otros lenguajes, y esto varía los resultados de velocidad. Las prestaciones de Perl son similares a las de otros lenguajes como Python, PHP o Ruby, pero más lento que la mayor parte de lenguajes compilados.


title: Perl

text: Perl puede ser más lento que otros lenguajes haciendo lo mismo porque tiene que compilar el código fuente cada vez que corre el programa. En "A Timely Start", Jean-Louis Leroy encontró que sus scripts en Perl tardaban mucho más tiempo en correr que lo que él esperaba porque el intérprete perl perdía la mayor parte del tiempo buscando y compilando los módulos. Como Perl no puede salvar su compilación intermedia como lo hacen Java, Python y Ruby, los scripts Perl conllevan esta sobrecarga en cada ejecución. La sobrecarga no es un problema cuando la fase de ejecución es muy larga, pero puede sesgar significativamente en tiempos de ejecución muy cortos, como se encuentra a menudo en los benchmarks. Una vez que perl inicia la fase de ejecución, sin embargo, puede ser muy rápido y típicamente supera a otros lenguajes dinámicos. Tecnologías como mod perl superan esto guardando el programa compilado en memoria entre ejecuciones, o Class::Autouse que retrasa la compilación de partes del programa hasta que son necesarias.


title: Perl

text: Nicholas Clark, un desarrollador principal de Perl, diserta sobre algunas mejoras en el diseño con Perl y otras soluciones en "When perl is not quite fast enough". Las rutinas más críticas de un programa Perl pueden escribirse en C o incluso en lenguaje ensamblador con o Inline.


title: Perl

text: Optimizar Perl puede requerir un conocimiento íntimo de su funcionamiento en lugar de la destreza con el lenguaje y su sintaxis, significando que el problema está con la implementación de Perl en lugar de con el lenguaje mismo. Raku, la siguiente versión, tomará algunas de estas ideas como lecciones, que otros lenguajes ya han aprendido.


title: Perl

text: En el año 2000, en la conferencia Perl, Jon Orwant hizo una petición para una nueva versión del lenguaje. Esto condujo a una decisión para comenzar el trabajo del rediseño del lenguaje, que se llamaría Perl 6. Se pidieron propuestas a la comunidad Perl para las nuevas características del lenguaje, y se recibieron más de 300 RFC (del inglés "Request For Comments", petición de comentarios).


title: Perl

text: Larry Wall estuvo los siguientes años digiriendo los RFC y sintetizándolos en un entorno de trabajo coherente para Perl 6. Presentó su diseño de Perl 6 en una serie de documentos llamados Apocalipsis, que se numeran para corresponderse con los capítulos de "Programming Perl". La actual, inacabada especificación de Perl 6, está resumida en unos documentos de diseño llamados Sinopsis, que están numerados para corresponder a los Apocalipsis.


title: Perl

text: Perl 6 no tiene la intención de ser compatible para atrás, aunque existirá un modo de compatibilidad.


title: Perl

text: En 2001 se decidió que Perl 6 corriese en una máquina virtual llamada Parrot. Esto quiere decir que otros lenguajes que usen Parrot podrán ganar acceso nativo a CPAN y permitirá algún cierto nivel de desarrollo cruzado.


title: Perl

text: En 2005 Audrey Tang creó el proyecto pugs, una implementación de Perl 6 en Haskell. Fue y es una plataforma de testeo del lenguaje Perl 6 (separado del desarrollo actual de la implementación) permitiendo a los diseñadores explorar. El proyecto pugs engendró una activa comunidad Perl/Haskell centrada alrededor del canal irc #perl6 en Freenode.


title: Perl

text: Un cierto número de características en el lenguaje Perl 6 muestran una similitud con las de Haskell y Perl 6 ha sido acogido por la comunidad Haskell como un potencial lenguaje de scripting.


title: Perl

text: En el 2006, Perl 6, Parrot y pugs siguen estando bajo desarrollo y un nuevo módulo para Perl 5 llamado v6 permite a una parte del código Perl 6 correr directamente sobre Perl 5.


title: Perl

text: En octubre de 2019, ante la evidencia de que Perl 6 es un lenguaje muy diferente de Perl 5, y para que no se generara una confusión entre los dos lenguajes, se decidió renombrarlo a Raku.


title: Perl

text: Como en C, las competiciones de código ofuscado son un rasgo popular de la cultura Perl. El homenajea la virtud de la flexibilidad sintáctica de Perl. El programa siguiente imprime el texto "Just another Perl / Unix hacker", usando 32 procesos en paralelo coordinados con pipes. La explicación completa está disponible en el sitio web del autor.


title: Perl

text: @P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{ @p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+=$f=!fork;map{$P=$P[$f^ord ($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P.]/&& close$_}%p;wait until$?;map{/^r/&&}%p;$_=$d[$q];sleep rand(2)if/\S/;print


title: Perl

text: De forma similar al código ofuscado pero con un propósito diferente, "Poesía Perl" es la práctica de escribir poemas que puedan ser compilados como código legal de Perl (aunque generalmente sin sentido). Esta afición es más o menos única en Perl debido al gran número de palabras normales del Inglés que el lenguaje utiliza. Los nuevos poemas se publican de forma regular en el sitio Perl Monks, en la sección Poesía Perl. Parte del saber de Perl está en Black Perl, un ejemplo infame de la poética de Perl.


title: Perl

text: Otro pasatiempo es "Perl Golf". Como con el deporte real, la meta es reducir el número de golpes necesarios para completar un objetivo, pero aquí, los "golpes" se refieren a los pulsaciones de teclado en vez de a los recorridos en un club de golf. Se propone una tarea, como "escanear un string de entrada y devolver el palíndromo más grande que contenga" y los participantes intentan batir a sus oponentes escribiendo soluciones que requieran cada vez menos caracteres de código fuente Perl.


title: Perl

text: Otra tradición entre los "hacker" Perl es escribir JAPH, que es una especie de pequeños programas ofuscados que imprimen la frase "Just another Perl hacker,". El "canónico" JAPH incluye la coma al final, aunque a menudo se omite, y otras muchas variantes que se han creado (ejemplo, que imprime "Just Another Perl Pirate!").


title: Perl

text: Un módulo Perl interesante es Lingua::Romana::Perligata (en CPAN). Este módulo traduce el código fuente de un script escrito en Latín a Perl, permitiendo al programador escribir programas ejecutables en Latín.


title: Perl

text: La comunidad Perl ha reservado el espacio de nombres "Acme" para los módulos que sean divertidos o experimentales. Algunos de los módulos Acme están implementados de maneras muy entretenidas. Algunos ejemplos:La comunidad Perl está constituida por grupos que a su vez conforman Perl Mongers.


title: Perl

text: En España hay tres grupos:


title: Positivismo

text: El positivismo o filosofía positiva es una teoría filosófica que sostiene que todo conocimiento genuino se limite a la interpretación de los hallazgos «positivos», es decir, reales, perceptibles sensorialmente y verificables. Según esta postura, todo conocimiento genuino es o bien positivo—"a posteriori" y derivado exclusivamente de la experiencia de los fenómenos naturales y de sus propiedades y relaciones—o bien verdadero por definición, es decir, analítico y tautológico. Así, la información derivada de la experiencia sensorial, interpretada a través de la razón y la lógica, constituye la fuente exclusiva de todo conocimiento cierto. Los datos verificados (hechos positivos) recibidos de los sentidos son conocidos como evidencia empírica; así pues, el positivismo se basa en el empirismo.


title: Positivismo

text: Esta línea de pensamiento se encuentra ya en la antigüedad griega. Como un nuevo desarrollo del siglo XIX, se contrapuso a las visiones escolásticas tradicionalmente imperantes de una filosofía trascendental. Estas últimas perspectivas afirmaban, en cambio, que el conocimiento se genera por propiedades eternamente válidas -y, en últimas, creadas por Dios- de la mente o la razón. Esto podría demostrarse sobre la base de resultados positivos.


title: Positivismo

text: En el contexto de los inventos, descubrimientos y la expansión del conocimiento científico durante el Renacimiento, estos intentos tradicionales de explicación filosófico-religiosa se habían vuelto cuestionables desde hacía ya un buen tiempo. Esto probablemente condujo a la exigencia del positivismo respecto que los hallazgos positivos fueran interpretados sin apelar a explicaciones teológicas o metafísicas, en contraste con la práctica habitual hasta entonces.


title: Positivismo

text: Posteriormente surgieron diferentes aproximaciones positivistas, asociadas, entre otros, a los siguientes filósofos: Auguste Comte (1798-1857), Hippolyte Taine (1828-1893), Jean-Marie Guyau (1854-1888), James Mill (1773-1836), Jeremy Bentham (1748-1832), John Stuart Mill (1806-1873), Charles Darwin (1809-1882), Herbert Spencer (1820-1903), Roberto Ardigò (1828-1920), Ludwig Feuerbach (1804-1872), Eugen Dühring (1833-1921), Friedrich Nietzsche (1844-1900), Ernst Mach (1838-1916), Ernst Laas (1837-1885), Richard Avenarius (1843-1896), Hans Vaihinger (1852-1933), Friedrich Jodl (1849-1914), o Theodor Ziehen (1862-1950).


title: Positivismo

text: El término positivismo se remonta a Auguste Comte (1798-1857). Él y sus sucesores elaboraron su planteamiento hasta convertirlo en un enfoque social-científico-humanista. El positivismo sociológico sostiene que la sociedad, al igual que el mundo físico, opera de acuerdo con leyes generales. Se rechaza el conocimiento introspectivo e intuitivo, así como la metafísica y la teología, en tanto las afirmaciones metafísicas y teológicas no pueden ser verificadas por la experiencia de los sentidos.


title: Positivismo

text: Aunque el enfoque positivista ha sido un tema recurrente en la historia del pensamiento occidental,el enfoque moderno fue formulado por el filósofo Auguste Comte a comienzos del siglo XIX.Comte sostenía que, al igual que el mundo físico funciona según la gravedad y otras leyes absolutas, lo mismo ocurre con la sociedad.


title: Positivismo

text: Según ciertas acepciones, el positivismo ha sido interpretado como una corriente filosófica que afirma que el único conocimiento auténtico es el conocimiento científico y que tal conocimiento solo puede surgir del método científico, siendo el ejemplo ideal las ciencias físicas que triunfan claramente en el dominio de la naturaleza y en las aplicaciones técnicas que de ella se derivan. Esta postura es conocida como cientificismo.


title: Positivismo

text: Como consecuencia de esta postura, los positivistas critican la metafísica y teología como pseudociencia por buscar lo que está más allá de la ciencia. Una línea de crítica fue a partir de lo que se llamó las «trampas del lenguaje», lo que supuso un interés en el estudio del lenguaje tanto en su dimensión formal, empirismo lógico, como en cuanto lenguaje natural, estudiando los «juegos del lenguaje», y dio lugar a la filosofía analítica.


title: Positivismo

text: El positivismo deriva del empirismo y de la epistemología que surge a inicios del siglo XIX de la mano de los pensadores franceses Henri de Saint-Simon y Auguste Comte, y el británico John Stuart Mill. Se extiende y desarrolla por el resto de Europa en la segunda mitad del siglo XIX. Desde un positivismo extremo hasta un positivismo casi idealista, el siglo XIX y comienzos del XX ofrecen un riquísimo panorama de autores y escuelas todas bajo denominación positivista. El rasgo común que caracteriza a todos ellos es la aceptación del conocimiento científico como única forma de conocimiento legítimo y el rechazo a la metafísica y la teología como pseudociencia.


title: Positivismo

text: El positivismo surgió como manera de legitimar el estudio científico naturalista del ser humano, tanto individual como colectivamente. Según distintas versiones, la necesidad de estudiar científicamente al ser humano nace debido a la experiencia sin parangón que fue la Revolución francesa, que obligó por primera vez a ver a la sociedad y al individuo como objetos.


title: Positivismo

text: La aplicación de la filosofía positiva a las diferentes ciencias y objetos de investigación, así como la rigidez en que se consideren los principios empiristas, dieron lugar a muy diversos tipos de empirismos y positivismos.


title: Positivismo

text: Estas corrientes tienen como características diferenciadoras la defensa de un monismo metodológico (teoría que afirma que hay un solo método aplicable en todas las ciencias). La explicación científica ha de tener la misma forma en cualquier ciencia si se aspira a ser ciencia, específicamente el método de estudio de las ciencias físico-naturales. A su vez, el objetivo del conocimiento para el positivismo es explicar causalmente los fenómenos por medio de leyes generales y universales, lo que le lleva a considerar a la razón como medio para otros fines (razón instrumental). La forma que tiene de conocer es inductiva, despreciando la creación de teorías a partir de principios que no han sido percibidos objetivamente. En metodología histórica, el positivismo prima fundamentalmente las pruebas documentadas, minusvalorando las interpretaciones generales, por lo que los trabajos de esta naturaleza suelen tener excesiva acumulación documental y escasa síntesis interpretativa.


title: Positivismo

text: Auguste Comte formuló a mediados del siglo XIX la idea de la creación de la sociología como ciencia que tiene a la sociedad como su objeto de estudio. La sociología sería un conocimiento libre de todas las relaciones con la filosofía y basada en datos empíricos en igual medida que las ciencias naturales.


title: Positivismo

text: Una de sus propuestas más destacadas es la de la investigación empírica para la comprensión de los fenómenos sociales, de la estructura y el cambio social (razón por la que se le considera padre de la sociología como disciplina científica). Comte presenta a la historia humana en tres fases:Además afirma que no es posible alcanzar un conocimiento de realidades que estén más allá de lo dado, de lo positivo, y niega que la filosofía pueda dar información acerca del mundo: esta tarea corresponde exclusivamente a las ciencias.


title: Positivismo

text: Dentro de esta, desde la perspectiva de Leopold Von Ranke, se dice que el historiador es imparcial, ya que es capaz de superar fobias, predilecciones o emociones.


title: Positivismo

text: De acuerdo al positivismo clásico: basta con reunir cierta cantidad de hechos documentados para que surja la ciencia de la historia.


title: Positivismo

text: El positivismo asume la cuantificación para que los historiadores puedan estar seguros de sus afirmaciones mediante la medición de los historiadores, aunque cuando ésta se convierte en la única solución aparece el problema de negar la veracidad a todo lo que no esté cuantificado o probado.


title: Positivismo

text: Durante el siglo XIX, a partir de los estudios de Bertrand Russell y otros, el filósofo Ludwig Wittgenstein elabora el texto "Tractatus Logico-Philosophicus", que sirve de inspiración para el surgimiento del Círculo de Viena, grupo de intelectuales que tuvo como objetivo el alejar definitivamente a la ciencia de la metafísica, a partir del desarrollo de la lógica de Russell. Esta propuesta plantea un método basado en la experimentación, observación y recolección objetiva de datos a fin de buscar explicaciones a las causas que originan los fenómenos.


title: Positivismo

text: Entre las corrientes positivistas se puede mentar el positivismo ideológico, empiriocriticismo, positivismo metodológico o conceptual, positivismo analítico, positivismo sociológico, positivismo realista, iuspositivismo y neopositivismo (empirismo lógico o positivismo lógico). Los enfoques sociológicos en filosofía de la ciencia y epistemología han sido tradicionalmente los principales críticos del positivismo, aunque ambas posturas no son necesariamente contradictorias.


title: Positivismo

text: En el campo del derecho, el denominado positivismo jurídico o iuspositivismo no guarda relación en su origen con el positivismo filosófico, sino con el concepto de derecho positivo (la consideración del derecho como creación del ser humano).


title: Positivismo

text: Actualmente, en la psicología conviven múltiples escuelas, muchas de las cuales se basan en el positivismo para el estudio del ser humano. Entre dichas escuelas o enfoques destaca el cognitivo-conductual. Cabe mencionar el avance de la neurociencia, que aborda temáticas mentales que antes parecían inescrutables desde un punto de vista naturalista.


title: Partitura

text: Una partitura es un documento manuscrito o impreso que representa e indica cómo debe interpretarse una composición musical, mediante un lenguaje propio formado por signos musicales y el llamado sistema de notación. Como sus análogos los libros, los folletos, etc., el medio de la partitura generalmente es el papel o, en épocas anteriores, el pergamino. Aunque el acceso a la notación musical en los últimos años incluye también la presentación en pantallas de ordenador.


title: Partitura

text: En música orquestal, se denomina "partitura" al documento que utiliza exclusivamente el director de orquesta y que contiene la obra que se ejecutará con todas sus indicaciones. Esta se desglosa en "particellas" o partes: nombre dado a cada uno de esos desgloses o particiones instrumentales que tienen los intérpretes de los diferentes instrumentos, las cuales pueden incluir cada una dos o más instrumentos similares, como un piccolo y una flauta, un oboe y un corno inglés, etc., y ser ejecutadas por un mismo intérprete.


title: Partitura

text: La palabra «partitura» término italiano, quiere decir literalmente "insieme di parti," es decir «conjunto de partes». Un gran número de lenguas mantienen este mismo origen etimológico, como por ejemplo las acepciones "Partitur" en alemán, "partition" en francés o "partitura" en portugués, catalán y euskera. En lengua inglesa se denomina "score".


title: Partitura

text: La partitura se puede utilizar como un registro, una guía o un medio para interpretar una pieza de música. Aunque no sustituye al sonido de la ejecución musical, la partitura se puede estudiar para construir la interpretación y para dilucidar los aspectos de la música que pueden no ser evidentes a partir de la simple audición. Se puede obtener información fidedigna sobre una pieza musical mediante el estudio de los bocetos y las primeras versiones escritas de las obras que el compositor pudo haber conservado, así como la partitura final autógrafa y las anotaciones personales hechas en borradores y partituras impresas.


title: Partitura

text: La comprensión de las partituras requiere una forma especial de alfabetización, la capacidad de leer notación musical. No obstante, la capacidad de leer o escribir música no es un requisito imprescindible para componer música. Muchos compositores han sido capaces de crear música en formato impreso, sin la habilidad de leer o escribir en notación musical, siempre y cuando un copista de algún tipo estuviese disponible. Por ejemplo, el compositor ciego del John Stanley así como los compositores y letristas del Lionel Bart, Irving Berlin y Paul McCartney.


title: Partitura

text: La habilidad conocida como «lectura a primera vista» (o repentización) es la capacidad de un músico para interpretar una obra musical desconocida viendo la partitura de esta por primera vez. La facultad de leer a primera vista se espera tanto de los músicos profesionales como de los aficionados serios que tocan música clásica y otros géneros relacionados. Una habilidad aún más refinada es la capacidad de mirar una pieza musical desconocida y escuchar la mayoría o la totalidad de los sonidos (melodías, armonías, timbres, etc.) mentalmente sin tener que tocar la pieza.


title: Partitura

text: Con la excepción de las interpretaciones en solitario, donde se espera la memorización, los músicos clásicos suelen tener la partitura a mano cuando tocan. En la música de jazz, que es en su mayoría improvisada, la partitura —llamada "lead sheet" en este contexto— se utiliza para dar indicaciones básicas de las melodías, cambios de acordes y arreglos.  La música manuscrita o impresa es menos importante en otras tradiciones de práctica musical. Aunque la mayor parte de la música popular se publica en notación de algún tipo, es muy común que la gente aprenda música «de oído». Este es también el caso en la mayoría de las formas occidentales de música folclórica, donde las canciones y las danzas se transmiten mediante la tradición oral y auditiva. La música de otras culturas, tanto folclórica como clásica, con frecuencia se transmite por vía oral, aunque algunas culturas no occidentales desarrollaron sus propias formas de notación musical en partituras.


title: Partitura

text: Aunque la partitura suele ser considerada como una plataforma para la nueva música y una ayuda a la composición (es decir, el compositor "pone por escrito" la música), también puede servir como un registro visual de la música ya existente. Los estudiosos y otras personas han hecho transcripciones para reproducir la música occidental y no occidental en un formato legible para el estudio, el análisis y la interpretación creativa. Esto se ha llevado a cabo con la música folclórica y tradicional. Por ejemplo, los volúmenes de música popular magiar y rumana escritos por Béla Bartók. Pero también se hizo con grabaciones sonoras de improvisaciones hechas por músicos como el piano de jazz, así como con actuaciones que pueden estar basadas solo parcialmente en notación musical. Un ejemplo exhaustivo y reciente de esto último es la colección "The Beatles: Complete Scores", que trata de transcribir en pentagramas y tablaturas todas las canciones tal y como fueron grabadas por los Beatles en detalle instrumental y vocal.


title: Partitura

text: La partitura consta de un pentagrama, formado por cinco líneas y cuatro espacios, sobre el cual se ubican los símbolos que representan los componentes musicales de la obra escrita en ella. Estos signos musicales suelen indicar las notas musicales, las figuras, es decir la duración de las notas, la armadura de clave, tonalidad, alteraciones (como bemoles, sostenidos y becuadros), las ligaduras entre notas, la articulación y otras particularidades de la interpretación musical. Adicionalmente, las partituras suelen disponer fuera del pentagrama de información adicional sobre cómo interpretar las diferentes secciones de la obra, como el "tempo" y la dinámica, entre otros.


title: Partitura

text: Para ampliar información sobre los elementos que pueden aparecer en una partitura véase el artículo dedicado a los signos musicales.


title: Partitura

text: Las partituras mantienen un sistema consuetudinario de organizar los instrumentos musicales por familias y, a su vez, las familias se dividen en secciones. Dentro de cada familia, los instrumentos son ordenados en función de la tesitura de agudo a grave (por ejemplo, el piccolo precede a la flauta y el oboe precede al corno inglés).


title: Partitura

text: Las partituras orquestales se organizan generalmente en el siguiente orden:


title: Partitura

text: Las partituras modernas pueden presentarse en diferentes formatos. Si una pieza está compuesta para un solo instrumento o voz (por ejemplo, una pieza para un instrumento solista o para voz solista "a capella"), la obra completa puede ser escrita o impresa como una sola partitura. Si una pieza instrumental está diseñada para ser tocada por más de una persona, por lo general cada intérprete tendrá para tocar una partitura separada llamada parte o "particella". Este es precisamente el caso de la publicación de composiciones que requieren de cinco o más intérpretes. No obstante, invariablemente se publica la partitura completa también. Las voces cantadas en una obra vocal que hoy en día no suelen publicarse por separado, aunque así ha sido históricamente, sobre todo antes de que la impresión musical ampliase la disponibilidad de partituras.


title: Partitura

text: Las partituras pueden ser editadas publicadas como individuales o de obras (por ejemplo, una canción popular o una sonata de Beethoven), en las colecciones (por ejemplo, trabajos de uno o varios compositores), como piezas realizadas por un determinado artista, etc.


title: Partitura

text: Cuando las partes separadas de cada instrumento o voz se imprimen juntas, el texto resultante se denomina partitura. Convencionalmente, se compone de una veintena notación musical con cada parte instrumental o vocal, en alineación vertical (es decir, que los hechos concurrentes en la notación para cada parte se organizó ortográficamente). El término partitura también se ha utilizado para referirse a las partituras escritas por un solo intérprete. La distinción entre la partitura y una parte se aplica cuando hay más de una parte necesaria para la interpretación.


title: Partitura

text: Las partituras pueden presentarse en varios formatos, como los siguientes:Si la partitura completa es muy compleja y grande, impidiendo así, la lectura de un instrumento en específico, entonces es impresa una parte solista de este mismo.


title: Partitura

text: Antes del la música occidental era escrita a mano y conservada en manuscritos, normalmente recopilados en grandes volúmenes. Los ejemplos más conocidos son los manuscritos medievales de canto monódico. En el caso de la polifonía medieval, como el motete, las voces eran escritas en porciones separadas de páginas enfrentadas. Este proceso se vio favorecido por la llegada de la notación mensural para clarificar los aspectos rítmicos y fue acompañado por la práctica medieval de componer voces polifónicas de forma secuencial, en lugar de simultáneamente como en épocas posteriores. Los manuscritos que muestran todas las voces juntas en una sola partitura no eran comunes y se limitaban sobre todo al "organum", en especial el de la Escuela de Notre Dame.


title: Partitura

text: Incluso después de la aparición de la música impresa, gran cantidad de música continuó existiendo únicamente en manuscritos hasta bien entrado el .


title: Partitura

text: Existían varias dificultades para adaptar la nueva tecnología de impresión a la música. El primer libro impreso que incluía música, el Salterio de Maguncia (1457), tuvo que recoger la notación añadida a mano. Este caso es similar al espacio que se deja a la izquierda en otros incunables para las letras mayúsculas. El salterio fue impreso en Maguncia, Alemania por Johann Fust y Peter Schöffer. Actualmente un ejemplar está ubicado en el Castillo de Windsor y otro en la Biblioteca Británica.


title: Partitura

text: Más adelante las líneas del pentagrama fueron impresas, pero todavía los escribas añadían en el resto de la música a mano. La mayor dificultad en el uso de los tipos móviles para la impresión de música es que todos los elementos debían estar alineados; la cabeza de la nota debía estar correctamente alineada con el pentagrama o si no habría significado algo distinto de lo que debería. En la música vocal el texto debe estar alineado de forma adecuada con las notas, aunque en aquella época esta cuestión no era una prioridad, ni siquiera en los manuscritos.