Estou planejando aprender Perl 5 e como só usei PHP até agora, gostaria de saber um pouco sobre como as linguagens diferem umas das outras.
Como o PHP começou como um conjunto de "hacks Perl", ele obviamente clonou alguns recursos do Perls.
Quais são as principais diferenças na sintaxe? É verdade que com Perl você tem mais opções e maneiras de expressar algo?
Por que o Perl não é mais usado para sites dinâmicos com muita frequência? O que fez o PHP ganhar mais popularidade?
Respostas:
Perl e PHP são mais diferentes do que parecidos. Vamos considerar o Perl 5, já que o Perl 6 ainda está em desenvolvimento. Algumas diferenças, agrupadas aproximadamente por assunto:
=~
,!~
), aspas (qw
,qx
& c.), Exponenciação (**
), repetição de string (x
) e intervalo (..
e...
). PHP tem alguns operadores que Perl não tem, como o operador de supressão de erros (@
),instanceof
(embora Perl tenha oUniversal::isa
método) eclone
.new
é um operador. Em Perl, é o nome convencional de uma sub-rotina de criação de objetos definida em pacotes, nada de especial no que diz respeito à linguagem.Operadores lógicos Perl retornam seus argumentos, enquanto eles retornam booleanos em PHP. Experimentar:
em cada idioma. Em Perl, você pode até
$foo ||= 'default'
definir $ foo para um valor se ainda não estiver definido. A maneira mais rápida de fazer isso em PHP é$foo = isset($foo) ? $foo : 'default';
(Atualizar, em PHP 7.0+ você pode fazer$foo = $foo ?? 'default'
)$foo
é uma variável diferente de@foo
ou%foo
.extract
função.undefined
(ver perldata ). As matrizes PHP são esparsas; definir um elemento não definirá os elementos intermediários.array_slice
para extrair uma fatia earray_splice
atribuir a uma fatia.local
palavra - chave.goto
função.Perl nivela listas (veja perlsub ); para estruturas de dados não niveladas, use referências.
PHP não simplifica arrays.
BEGIN
,UNITCHECK
,CHECK
,INIT
eEND
) que são executados. Ao contrário do PHPauto_prepend_file
eauto_append_file
, não há limite para o número de cada tipo de bloco de código. Além disso, os blocos de código são definidos nos scripts, enquanto as opções de PHP são definidas no servidor e nos arquivos de configuração por diretório.$bam[-1]
é o elemento final da matriz. Os subscritos negativos em PHP são subscritos como qualquer outro.$obj->method(@args)
é traduzido para algo como(ref $obj)::method($obj, @args)
. Lista não exaustiva:$this
em métodos. Perl passa uma referência ao objeto como o primeiro argumento para métodos.@ISA
variável de pacotes .//
é um operador. Em PHP, é o início de um comentário de uma linha.create_function
função) e nenhum suporte para encerramentos.$@
(emeval
vez detry
, emdie
vez dethrow
). O móduloErrorTry :: Tiny suporta exceções conforme você as encontra em outras linguagens (bem como alguns outros módulos listados na seção Consulte também de Error ).PHP foi inspirado por Perl da mesma forma que Phantom of the Paradise foi inspirado por Phantom of the Opera , ou Strange Brew foi inspirado por Hamlet . É melhor deixar de pensar nas especificidades de comportamento do PHP ao aprender Perl, caso contrário, você se enganará.
Meu cérebro dói agora, então vou parar.
fonte
@array = qw(a b c)
e faz$array[4] = 'e'
, o conteúdo do array não é exatamente('a', 'b', 'c', undef, 'e')
; eles são('a', 'b', 'c',
inexistentes ,'e')
. Ou seja, o[3]
slot não contém um ponteiro para um escalar que é undef; não contém absolutamente nada (e oexists
operador testa isso). Uma pequena diferença, mas uma diferença. :)$foo
se ainda não estiver definido, pode serisset($foo) || $foo='default';
Quando o PHP entrou em cena, todos ficaram impressionados com as principais diferenças do Perl:
<?php ... ?>
qualquer lugar. Sem modelos chatos.Com o passar do tempo, todos aprenderam que não eram benefício, hehe ...
fonte
Notei que a maioria das páginas PHP vs. Perl parecem ser do
laços, e raramente fazem comparações razoáveis.
Em termos de sintaxe, você descobrirá que o PHP é geralmente mais fácil de entender do que o Perl, principalmente quando você tem pouca experiência. Por exemplo, cortar uma string de espaços em branco à esquerda e à direita em PHP é simplesmente
Em Perl, é um pouco mais enigmático
(Acredito que isso seja um pouco mais eficiente do que capturar e substituir uma única linha, e também um pouco mais compreensível.) No entanto, embora o PHP seja geralmente mais semelhante ao inglês, às vezes ainda mostra suas raízes como um invólucro para baixo nível C, por exemplo,
strpbrk
estrspn
provavelmente raramente são usados, porque a maioria dos amadores de PHP escrevem suas próprias funções equivalentes para algo muito esotérico, ao invés de gastar tempo explorando o manual. Também me pergunto sobre os programadores para quem o inglês é a segunda língua, já que todos estão em pé de igualdade com coisas como Perl, tendo que aprendê-lo do zero.Já mencionei o manual. PHP tem um bom manual online e, infelizmente, precisa dele. Ainda me refiro a ele de vez em quando para coisas que deveriam ser simples, como ordem de parâmetros ou convenção de nomenclatura de função. Com Perl, você provavelmente vai achar que você está se referindo a um manual muito como você a começar e, em seguida, um dia você vai ter um a-ha momento e nunca precisar dele novamente. Bem, pelo menos não até que você esteja mais avançado e perceba que não apenas existe mais de uma maneira, mas provavelmente existe uma maneira melhor, alguém provavelmente já fez dessa maneira melhor, e talvez você deva apenas visitar o CPAN.
Perl tem muito mais opções e maneiras de expressar coisas. Isso não é necessariamente bom, embora permita que o código seja mais legível se usado com sabedoria e pelo menos uma das maneiras com as quais você provavelmente está familiarizado. Existem certos estilos e expressões idiomáticas em que você se encontrará e recomendo sinceramente a leitura das Melhores Práticas de Perl (mais cedo ou mais tarde), junto com o Perl Cookbook, Segunda Edição para se atualizar rapidamente sobre a solução de problemas comuns.
Eu acredito que a razão pela qual o Perl é usado com menos frequência em ambientes de hospedagem compartilhada é que historicamente a lentidão percebida do CGI e a falta de vontade dos hosts em instalar o mod_perl devido a problemas de segurança e configuração tornaram o PHP uma opção mais atraente. O ciclo então continuou, mais pessoas aprenderam a usar PHP porque mais hosts o ofereciam e mais hosts o ofereciam porque era isso que as pessoas queriam usar. As diferenças de velocidade e problemas de segurança são discutidos pelo FastCGI atualmente e, na maioria dos casos, o PHP também fica sem FastCGI, em vez de deixá-lo no núcleo do servidor da web.
Seja ou não esse o caso ou por outras razões, o PHP se tornou popular e uma infinidade de aplicativos foram escritos nele. Para a maioria das pessoas que desejam apenas um site básico com um simples blog ou galeria de fotos, PHP é tudo o que precisam, então é isso que os hosts promovem. Não deve haver nada que o impeça de usar Perl (ou qualquer outra coisa que você escolher) se desejar.
Em um nível empresarial, duvido que você encontraria muito PHP em produção (e por favor, ninguém aponta o Facebook como contra-exemplo, eu disse em nível empresarial ).
fonte
$str =~ s/^\s+|\s+$//g;
Perl é muito usado para sites, não menos que Python e Ruby, por exemplo. Dito isso, o PHP é usado com muito mais frequência do que qualquer um deles. Acho que os fatores mais importantes nisso são a facilidade de implantação do PHP e a facilidade de começar com ele.
As diferenças na sintaxe são muitas para resumir aqui, mas geralmente é verdade que ela tem mais maneiras de se expressar (isso é conhecido como TIMTWOTDI, há mais de uma maneira de fazer isso).
fonte
Minha coisa favorita sobre Perl é a maneira como ele lida com arrays / listas. Aqui está um exemplo de como você faria e usaria uma função Perl (ou "sub-rotina"), que faz uso disso para argumentos:
No PHP, você poderia fazer algo semelhante
list()
, mas não é exatamente o mesmo; em Perl, listas e matrizes são tratadas da mesma forma (geralmente). Você também pode fazer coisas como:E outra diferença que você DEVE saber, são os operadores de comparação numérica / string. Em Perl, se você usar
<
,>
,==
,!=
,<=>
, e assim por diante, Perl converte ambos os operandos para números. Se você deseja converter como strings em vez disso, você tem que usarlt
,gt
,eq
,ne
,cmp
(os respectivos equivalentes dos operadores listados anteriormente). Exemplos onde isso realmente levará você:fonte
Não preciso acrescentar nada à fantástica resposta da outis, quero apenas mostrar a resposta para a sua pergunta:
Verifique primeiro alguns sites de "Tendências de Trabalho" - e você poderá fazer o julgamento sozinho.
como você pode ver, o perl ainda é um líder - mas preferível para aplicações reais, não para brinquedos. :)
fonte