Estoy planeando aprender Perl 5 y como solo he usado PHP hasta ahora, quería saber un poco sobre cómo los lenguajes se diferencian entre sí.
Como PHP comenzó como un conjunto de "hacks de Perl", obviamente ha clonado algunas de las características de Perls.
¿Cuáles son las principales diferencias en la sintaxis? ¿Es cierto 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?
Respuestas:
Perl y PHP son más diferentes que iguales. Consideremos Perl 5, ya que Perl 6 aún está en desarrollo. Algunas diferencias, agrupadas de forma aproximada por tema:
=~
,!~
), comillas (qw
,qx
& c.), Exponenciación (**
), repetición de cadenas (x
) y rango (..
y...
). PHP tiene algunos operadores que Perl no tiene, como el operador de supresión de errores (@
),instanceof
(aunque Perl tiene elUniversal::isa
método) yclone
.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 respecta al lenguaje.Los operadores lógicos de Perl devuelven sus argumentos, mientras que devuelven booleanos en PHP. Tratar:
en cada idioma. En Perl, incluso puede hacer
$foo ||= 'default'
para establecer $ foo en un valor si aún no lo está. La forma más corta de hacer esto en PHP es$foo = isset($foo) ? $foo : 'default';
(Actualización, en PHP 7.0+ puede hacerlo$foo = $foo ?? 'default'
)$foo
es una variable diferente de@foo
o%foo
.extract
función.undefined
(ver perldata ). Las matrices PHP son escasas; establecer un elemento no establecerá elementos intermedios.array_slice
para extraer un segmento yarray_splice
asignarlo a un segmento.local
palabra clave.goto
función.Perl aplana las listas (ver perlsub ); para estructuras de datos no aplanadas, utilice referencias.
PHP no aplana las matrices.
BEGIN
,UNITCHECK
,CHECK
,INIT
yEND
) que son ejecutados. A diferencia de PHPauto_prepend_file
yauto_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 los archivos de configuración del servidor y por directorio.$bam[-1]
es el elemento final de la matriz. Los subíndices negativos en PHP son subíndices como cualquier otro.$obj->method(@args)
se traduce a algo como(ref $obj)::method($obj, @args)
. Lista no exhaustiva:$this
en métodos. Perl pasa una referencia al objeto como primer argumento de los métodos.@ISA
variable de paquetes .//
es un operador. En PHP, es el comienzo de un comentario de una línea.create_function
función) y no tenía soporte para cierres.$@
(eneval
lugar detry
, endie
lugar dethrow
). El móduloErrorTry :: Tiny admite excepciones a medida que las encuentre en otros idiomas (así como algunos otros módulos enumerados en la sección Ver también de Error ).PHP se inspiró en Perl de la misma manera que Phantom of the Paradise se inspiró en Phantom of the Opera , o Strange Brew se inspiró en Hamlet . Es mejor olvidarse de los aspectos específicos del comportamiento de PHP cuando aprende Perl, de lo contrario, se tropezará.
Ahora me duele el cerebro, así que voy a parar.
fuente
@array = qw(a b c)
y lo hace$array[4] = 'e'
, el contenido de la matriz no es exactamente('a', 'b', 'c', undef, 'e')
; son('a', 'b', 'c',
inexistentes ,'e')
. Es decir, la[3]
ranura no tiene un puntero a un escalar que no sea definido; no contiene nada en absoluto (y elexists
operador lo prueba). Una pequeña diferencia, pero una diferencia. :)$foo
si aún no está configurado puede serisset($foo) || $foo='default';
Cuando PHP apareció en escena, todos quedaron impresionados con las principales diferencias con Perl:
<?php ... ?>
cualquier lugar. Sin plantillas aburridas.A medida que pasaba el tiempo, todos aprendieron que no eran un beneficio, jeje ...
fuente
Me he dado cuenta de que la mayoría de las páginas PHP frente a Perl parecen ser del tipo
calaña, y rara vez hacen comparaciones razonables.
En cuanto a la sintaxis, encontrará que PHP es a menudo 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
En Perl es algo más críptico
(Creo que esto es un poco más eficiente que capturar y reemplazar una sola línea, 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 envoltorio para el nivel C bajo, por ejemplo,
strpbrk
ystrspn
probablemente se usen con poca frecuencia, porque la mayoría de los aficionados a PHP escriben sus propias funciones equivalentes para algo demasiado esotérico, 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 todo el mundo está en pie de igualdad con cosas como Perl, teniendo que aprenderlo desde cero.Ya he mencionado el manual. PHP tiene un excelente manual en línea, y desafortunadamente 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, es probable que encuentre que usted se refiere a un manual del montón como a empezar y entonces un día usted tendrá una a-ha momento y nunca se necesite de nuevo. Bueno, al menos no hasta que esté más avanzado y se dé cuenta de que no solo hay más de una forma, sino que probablemente haya una forma mejor, es probable que alguien más ya lo haya hecho de esa forma mejor, y tal vez debería visitar CPAN.
Perl tiene muchas más opciones y formas de expresar las 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 con las que probablemente esté familiarizado. Hay ciertos estilos y modismos en los que se encontrará cayendo, y le recomiendo encarecidamente leer las Mejores prácticas de Perl (más temprano que tarde), junto con Perl Cookbook, Segunda edición para ponerse al día en 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 hosts para instalar mod_perl debido a problemas de seguridad y configuración ha hecho de PHP una opción más atractiva. Luego, el ciclo continuó, más personas aprendieron a usar PHP porque más hosts lo ofrecían y más hosts lo ofrecían porque eso era lo que la gente quería usar. Las diferencias de velocidad y los problemas de seguridad son discutidos por FastCGI en 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.
Sea o no este el caso o existen otras razones, PHP se hizo popular y se han escrito una gran cantidad de aplicaciones en él. Para la mayoría de las personas que solo quieren un sitio web de nivel de entrada con un blog simple o una galería de fotos, PHP es todo lo que necesitan, así que eso es lo que promueven los anfitriones. No debería haber nada que le impida usar Perl (o cualquier otra cosa que elija) si lo desea.
A nivel empresarial, dudo que encuentre demasiado PHP en producción (y por favor, nadie apunta a Facebook como contraejemplo, dije nivel empresarial ).
fuente
$str =~ s/^\s+|\s+$//g;
Perl se usa mucho para sitios web, no menos que Python y Ruby, por ejemplo. Dicho esto, PHP se usa con mucha más frecuencia que cualquiera de esos. Creo que los factores más importantes son la facilidad de implementación de PHP y la facilidad para comenzar con él.
Las diferencias de sintaxis son demasiadas para resumirlas 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).
fuente
Lo que más me gusta de Perl es la forma en que maneja las matrices / listas. Aquí hay un ejemplo de cómo crearía y usaría una función Perl (o "subrutina"), que hace uso de esto para argumentos:
En PHP se puede hacer algo similar
list()
, pero no es exactamente lo mismo; en Perl, las listas y las matrices se tratan de la misma forma (normalmente). También puedes hacer cosas como:Y otra diferencia que DEBE conocer son los operadores de comparación numéricos / de cadena. En Perl, si se utiliza
<
,>
,==
,!=
,<=>
, y así sucesivamente, Perl convierte los dos operandos a números. Si desea convertir como cadenas en su lugar, usted tiene que utilizarlt
,gt
,eq
,ne
,cmp
(los equivalentes respectivos de los operadores enumerados anteriormente). Ejemplos donde esto realmente te llevará:fuente
No necesito agregar nada a la fantástica respuesta de outis, solo quiero mostrar la respuesta para su pregunta:
Primero, consulte algunos sitios de "Tendencias laborales", y podrá emitir un juicio solo.
como puede ver, perl sigue siendo líder, pero es preferible para aplicaciones reales, no para juguetes. :)
fuente