predefinidas lista introduccion instrucciones funciones funcionalidades conclusion comandos php perl

lista - introduccion a php pdf



Diferencias entre Perl y PHP (6)

Estoy planeando aprender Perl 5 y como solo he usado PHP hasta ahora, quería saber un poco acerca de cómo los idiomas se diferencian entre sí.

Como PHP comenzó como un conjunto de "Perks pirateados", obviamente ha clonado algunas de las características de Perls.

  • ¿Cuáles son las principales diferencias en la sintaxis? ¿Es verdad que con Perl tienes más opciones y formas de expresar algo?

  • ¿Por qué Perl ya no se usa para sitios web dinámicos con mucha frecuencia? ¿Qué hizo que PHP ganara más popularidad?


Cuando PHP llegó a la escena, todos quedaron impresionados con las principales diferencias de Perl:

  1. Las variables de entrada ya están en el alcance global, sin análisis aburrido.
  2. Incrustación HTML Solo <?php ... ?> cualquier parte. Sin plantillas aburridas
  3. Mensajes de error en pantalla. No hay entradas de registro aburrido de errores.
  4. Fácil de aprender. No hay lectura aburrida de libros.

A medida que pasaba el tiempo, todos aprendieron que no eran un beneficio, jeje ...


Lo que más me gusta de Perl es la forma en que maneja las matrices / listas. Aquí hay un ejemplo de cómo harías y usarías una función Perl (o "subrutina"), que hace uso de esto para argumentos:

sub multiply { my ($arg1, $arg2) = @_; # @_ is the array of arguments return $arg1 * $arg2; }

En PHP puedes hacer algo similar con list() , pero no es lo mismo; en las listas de Perl y las matrices se tratan de la misma manera (generalmente). También puedes hacer cosas como:

$week_day_name = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")[$week_day_index];

Y otra diferencia que DEBE conocer, son los operadores de comparación numérica / de cadenas. En Perl, si usa < , > , == != , <=> , y así sucesivamente, Perl convierte ambos operandos en números. Si desea convertir como cadenas en su lugar, debe usar lt , gt , eq , ne , cmp (los equivalentes respectivos de los operadores enumerados anteriormente). Ejemplos donde esto realmente te atrapará:

if ("a" == "b") { ... } # This is true. if ("a" == 0) { ... } # This is also true, for the same reason.


Me di cuenta de que la mayoría de las páginas PHP vs. Perl parecen ser de

PHP es mejor que Perl porque <inserta la razón coja aquí>

ilk, y rara vez hacen comparaciones razonables.

En lo que respecta a la sintaxis, encontrará que PHP a menudo es más fácil de entender que Perl, especialmente cuando tiene poca experiencia. Por ejemplo, recortar una cadena de espacios en blanco iniciales y finales en PHP es simplemente

$string = trim($string);

En Perl es algo más críptico

$string =~ s/^/s+//; $string =~ s//s+$//;

(Creo que esto es un poco más eficiente que una sola línea de captura y reemplazo, y también un poco más comprensible.) Sin embargo, aunque PHP es a menudo más parecido al inglés, a veces todavía muestra sus raíces como un contenedor para bajo nivel C, por ejemplo, strpbrk y strspn probablemente son raramente utilizados, porque la mayoría de los dabblers de PHP escriben sus propias funciones equivalentes para cualquier cosa demasiado esotérica, en lugar de perder tiempo explorando el manual. También me pregunto acerca de los programadores para quienes el inglés es un segundo idioma, ya que todos están en igualdad de condiciones con cosas como Perl, teniendo que aprender de cero.

Ya he mencionado el manual. PHP tiene un buen manual en línea y, por desgracia, lo necesita. Todavía me refiero a él de vez en cuando para cosas que deberían ser simples, como el orden de los parámetros o la convención de nomenclatura de funciones. Con Perl, probablemente te darás cuenta de que te estás refiriendo mucho al manual a medida que comiences y, un día, tendrás un momento a-ha y nunca más lo necesitarás. Bueno, al menos no hasta que estés más avanzado y te des cuenta de que no solo hay más de una forma, probablemente haya una manera mejor, alguien más probablemente ya lo haya hecho de esa manera, y tal vez deberías simplemente visitar CPAN.

Perl tiene muchas más opciones y formas de expresar cosas. Esto no es necesariamente algo bueno, aunque permite que el código sea más legible si se usa con prudencia y al menos una de las formas en que es probable que esté familiarizado. Hay ciertos estilos y expresiones idiomáticas en las que se encontrará cayendo, y puedo recomendar encarecidamente leer Perl Best Practices (más pronto que tarde), junto con Perl Cookbook, Second Edition para ponerme al día sobre la resolución de problemas comunes.

Creo que la razón por la que Perl se usa con menos frecuencia en entornos de alojamiento compartido es que históricamente la lentitud percibida de CGI y la falta de voluntad de los anfitriones para instalar mod_perl debido a problemas de seguridad y configuración ha convertido a PHP en una opción más atractiva. Luego el ciclo continuó, más personas aprendieron a usar PHP porque más anfitriones lo ofrecieron, y más anfitriones lo ofrecieron porque eso es lo que la gente quería usar. Las diferencias de velocidad y los problemas de seguridad son objetados por FastCGI estos días, y en la mayoría de los casos PHP también se queda sin FastCGI, en lugar de dejarlo en el núcleo del servidor web.

Independientemente de que este sea el caso o de que haya otras razones, PHP se hizo popular y se han escrito innumerables aplicaciones. Para la mayoría de las personas que solo desean un sitio web básico con un simple blog o galería de fotos, PHP es todo lo que necesitan, y eso es lo que promueven los anfitriones. No debe haber nada que le impida usar Perl (o cualquier otra cosa que elija) si lo desea.

A nivel empresarial, dudo que encuentres demasiado PHP en producción (y por favor, ningún punto en Facebook como un contraejemplo, dije nivel empresarial ).


No necesito agregar nada a la fantástica respuesta de outis, solo quiero mostrar la respuesta para su pregunta:

¿Por qué Perl ya no se usa para sitios web dinámicos con mucha frecuencia? ¿Qué hizo que PHP ganara más popularidad que él?

Verifique primero algunos sitios de "Tendencias del trabajo", y puede emitir el juicio solo.

Como puede ver, Perl sigue siendo un líder, pero preferible para aplicaciones reales, no para juguetes. :)


Perl se usa mucho para sitios web, nada menos que Python y Ruby, por ejemplo. Dicho esto, PHP se usa mucho más a menudo que cualquiera de esos. Creo que los factores más importantes en eso son la facilidad de implementación de PHP y la facilidad para comenzar.

Las diferencias en la sintaxis son demasiadas para resumir aquí, pero en general es cierto que tiene más formas de expresarse (esto se conoce como TIMTWOTDI, Hay más de una forma de hacerlo).


Perl y PHP son más diferentes que iguales. Consideremos Perl 5, ya que Perl 6 aún está en desarrollo. Algunas diferencias, agrupadas aproximadamente por tema:

  • Perl tiene soporte nativo de expresiones regulares, incluidos los literales de expresiones regulares. PHP usa las funciones regexp de Perl como una extensión.
  • Perl tiene bastantes operators más, incluyendo matching ( =~ qw !~ ), qw ( qw , qw & c), exponentiation ( ** ), repetición de cadenas ( x ) y range ( .. y ... ) . PHP tiene algunos operadores que Perl no tiene, como el operador de supresión de errores ( @ ), instanceof (aunque Perl sí tiene el método Universal ::isa ) y clone .
  • En PHP, new es un operador. En Perl, es el nombre convencional de una subrutina de creación de objetos definida en paquetes, nada especial en lo que se refiere al lenguaje.
  • Los operadores lógicos de Perl devuelven sus argumentos, mientras que devuelven los booleanos en PHP. Tratar:

    $foo = '''' || ''bar'';

    en cada idioma En Perl, incluso puede hacer $foo ||= ''default'' para establecer $ foo en un valor si aún no está configurado. La forma más rápida de hacer esto en PHP es $foo = isset($foo) ? $foo : ''default''; $foo = isset($foo) ? $foo : ''default''; (Actualización, en PHP 7.0+ puedes hacer $foo = $foo ?? ''default'' )

  • Los nombres de variables de Perl indican un tipo incorporado, de los cuales Perl tiene tres, y el especificador de tipo es parte del nombre (llamado " clone "), por lo que $foo es una variable diferente de @foo o %foo .
  • (relacionado con el punto anterior) Perl tiene entradas de tabla de símbolos separadas para escalares, matrices, hashes, código, identificadores de archivo / directorio y formatos. Cada uno tiene su propio espacio de nombres.
  • Perl da acceso a la tabla de símbolos , aunque manipularla no es para los débiles de corazón. En PHP, la manipulación de la tabla de símbolos se limita a crear references y la función de extract .
  • Tenga en cuenta que "referencias" tiene un significado diferente en PHP y Perl. En PHP, las references son alias de tabla de símbolos. En Perl, las references son punteros inteligentes.
  • Perl tiene diferentes tipos para colecciones indexadas enteras (arrays) y colecciones indexadas de cadenas (hashes). En PHP, son del mismo tipo: una matriz asociativa / mapa ordenado .
  • Las matrices de Perl no son dispersas: la configuración de un elemento con índice mayor que el tamaño actual de la matriz establecerá todos los elementos intermedios en undefined (ver perldata ). Las matrices PHP son dispersas; establecer un elemento no establecerá elementos intermedios.
  • Perl admite slices matriz y hash de forma nativa, y las divisiones son asignables, lo que tiene todo tipo de uses . En PHP, usa array_slice para extraer un slice y array_splice para asignarlo a un slice.
  • Puede omitir el argumento para el operador de subíndices en PHP por un poco de magia. En Perl, no puedes dejar de lado el subíndice.
  • Los hashes de Perl están unordered .
  • Perl tiene una gran cantidad de variables predefinidas y mágicas . Las variables predefinidas de PHP tienen un propósito bastante diferente.
  • Perl tiene modificadores de enunciados : algunos enunciados de control pueden colocarse al final de un enunciado.
  • Perl admite el alcance dinámico a través de la palabra clave local .
  • Además, Perl tiene scope global, léxico (bloque) y paquete. PHP tiene scope global, función, objeto, clase y espacio de nombres.
  • En Perl, las variables son globales por defecto. En PHP, las variables en las funciones son locales por defecto.
  • Perl admite llamadas de cola explícitas a través de la función goto .
  • Los prototypes de Perl proporcionan una comprobación de tipos más limitada para los argumentos de función que la sugerencia de tipo de PHP. Como resultado, los prototipos tienen una utilidad más limitada que la tipificación de tipo.
  • En Perl, la última declaración evaluada se devuelve como el valor de una subrutina si la declaración es una expresión (es decir, tiene un valor), incluso si no se utiliza una declaración de devolución. Si la última declaración no es una expresión (es decir, no tiene un valor), como un ciclo, el valor de retorno no está especificado (ver perlsub ). En PHP, si no hay retorno explícito, el valor de retorno es NULL .
  • Perl aplana las listas (ver perlsub ); para estructuras de datos no aplanadas, use referencias.

    @foo = qw(bar baz); @qux = (''qux'', @foo, ''quux''); # @qux is an array containing 4 strings @bam = (''bug-AWWK!'', /@foo, ''fum''); # @bam contains 3 elements: two strings and a array ref

    PHP no aplana las matrices.

  • Perl tiene bloques de código especiales ( BEGIN , UNITCHECK , CHECK , INIT y END ) que se ejecutan. A diferencia de auto_prepend_file de PHP y auto_append_file , no hay límite para el número de cada tipo de bloque de código. Además, los bloques de código se definen dentro de los scripts, mientras que las opciones de PHP se establecen en el servidor y en los archivos de configuración por directorio.
  • En Perl, el punto y coma separa las declaraciones . En PHP, los terminates , excepto que una etiqueta de cierre de PHP ("?>") También puede terminar una declaración.
  • El valor de las expresiones en Perl es sensible al contexto .
  • Los subíndices negativos en Perl son relativos al final de la matriz. $bam[-1] es el elemento final de la matriz. Los subíndices negativos en PHP son subíndices como cualquier otro.
  • En Perl 5, las clases se basan en paquetes y no se parecen en nada a las clases de PHP (ni a la mayoría de los demás idiomas). Las clases de Perl 6 están más cerca de las clases de PHP, pero aún son bastante diferentes. (Perl 6 es different de Perl 5 en muchas otras formas, pero eso está fuera de tema). Muchas de las diferencias entre Perl 5 y PHP surgen del hecho de que la mayoría de las características de OO no están incorporadas a Perl, sino que se basan en hacks. Por ejemplo, el $obj->method(@args) se traduce a algo como (ref $obj)::method($obj, @args) . Lista no exhaustiva:
    • PHP proporciona automáticamente la variable especial $this en métodos. Perl pasa una referencia al objeto como primer argumento para los métodos.
    • Perl requiere referencias para ser blessed para crear un objeto. Cualquier referencia puede ser bendecida como una instancia de una clase dada.
    • En Perl, puede cambiar dinámicamente la herencia a través de la variable @ISA paquetes.
  • Perl admite la sobrecarga del operador .
  • Estrictamente hablando, Perl no tiene comentarios de líneas múltiples, pero el sistema POD puede usarse para el mismo efecto.
  • En Perl, // es un operador. En PHP, es el comienzo de un comentario de una línea.
  • Hasta PHP 5.3, PHP tenía un soporte terrible para funciones anónimas (la función create_function ) y no soporte para cierres.
  • PHP no tenía nada como los paquetes de Perl hasta la versión 5.3, que introdujo namespaces .
  • Podría decirse que el soporte integrado de Perl para excepciones no se parece en nada a excepciones en otros idiomas, tanto que apenas parecen excepciones. Usted evalúa un bloque y verifica el valor de $@ ( eval lugar de try , die lugar de throw ). El módulo Error Try::Tiny admite excepciones, ya que las encuentra en otros idiomas (así como en algunos otros módulos enumerados en la sección Ver también de Error ).

PHP fue inspirado por Perl de la misma manera que Phantom of the Paradise fue inspirado por Phantom of the Opera , o Strange Brew fue inspirado por Hamlet . Lo mejor es olvidarte de los detalles de comportamiento de PHP cuando aprendas Perl, de lo contrario te tropezarás.

Mi cerebro duele ahora, así que voy a parar.