Je prévois d'apprendre Perl 5 et comme je n'ai utilisé que PHP jusqu'à présent, je voulais en savoir un peu plus sur la façon dont les langues diffèrent les unes des autres.
Comme PHP a commencé comme un ensemble de "hacks Perl", il a visiblement cloné certaines des fonctionnalités de Perls.
Quelles sont les principales différences dans la syntaxe? Est-il vrai qu'avec Perl, vous avez plus d'options et de moyens d'exprimer quelque chose?
Pourquoi Perl n'est-il plus très souvent utilisé pour les sites Web dynamiques? Qu'est-ce qui a rendu PHP plus populaire?
Perl et PHP sont plus différents les uns des autres. Considérons Perl 5, étant donné que Perl 6 est en cours de développement. Quelques différences, regroupées plus ou moins par sujet:
=~
, !~
), comme des guillemets (qw
, qx
& c.), exponentiation (**
), répétition de chaîne (x
) et plage (..
et ...
). PHP a quelques opérateurs que Perl n'a pas, tels que opérateur de suppression d'erreur (@
), instanceof
(bien que Perl utilise la méthode Universal::isa
) et clone
.new
est un opérateur. En Perl, c'est le nom classique d'un sous-programme de création d'objet défini dans les packages, rien de spécial en ce qui concerne le langage.Les opérateurs logiques Perl retournent leurs arguments, alors qu'ils retournent des booléens en PHP. Essayer:
$foo = '' || 'bar';
dans chaque langue. En Perl, vous pouvez même faire $foo ||= 'default'
Pour définir $ foo sur une valeur si elle n'est pas déjà définie. Le moyen le plus rapide de faire ceci dans PHP est $foo = isset($foo) ? $foo : 'default';
_ (Mise à jour, dans PHP 7.0+) vous pouvez faire $foo = $foo ?? 'default'
)
$foo
Est une variable différente de @foo
Ou %foo
.extract
.undefined
(voir perldata ). PHP Les tableaux sont clairsemés; définir un élément ne définira pas les éléments intermédiaires.array_slice
pour extraire une tranche et array_splice
pour l'attribuer à une tranche.local
.goto
.Perl aplatit les listes (voir perlsub ); Pour les structures de données non aplaties, utilisez des références.
@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 n'aplatit pas les tableaux.
BEGIN
, UNITCHECK
, CHECK
, INIT
et END
) réalisé. À la différence des auto_prepend_file
et des auto_append_file
de PHP, il n'y a pas de limite au nombre de chaque type de bloc de code. En outre, les blocs de code sont définis dans les scripts, alors que les options PHP sont définies dans les fichiers de configuration du serveur et par répertoire).$bam[-1]
Est le dernier élément du tableau. Les indices négatifs dans PHP sont des indices comme les autres.$obj->method(@args)
est traduit en quelque chose comme (ref $obj)::method($obj, @args)
. Liste non exhaustive: $this
Dans les méthodes. Perl transmet une référence à l'objet en tant que premier argument des méthodes.@ISA
.//
Est un opérateur. En PHP, c'est le début d'un commentaire d'une ligne.create_function
)) Et aucun support pour les fermetures.$@
(eval
au lieu de try
, die
au lieu de throw
). Le PHP a été inspiré par Perl de la même manière Le fantôme du paradis a été inspiré de Le fantôme de l'opéra , ou Strange Brew a été inspiré par Hamlet . Il est préférable de ne pas penser aux comportements spécifiques de PHP lors de l’apprentissage de Perl, sinon vous vous ferez ébranler.
Mon cerveau me fait mal maintenant, alors je vais m'arrêter.
Quand PHP est arrivé sur la scène, tout le monde a été impressionné par les principales différences entre Perl:
<?php ... ?>
n'importe où. Pas de modèles ennuyeux.Au fur et à mesure que le temps passait, tout le monde a appris qu'ils n'étaient pas un avantage, hehe ...
J'ai remarqué que la plupart des PHP vs pages Perl semblent être du type
PHP est meilleur que Perl car <insérez ici la raison boiteuse>
ilk, et font rarement des comparaisons raisonnables.
En ce qui concerne la syntaxe, vous trouverez PHP est souvent plus facile à comprendre que Perl, en particulier lorsque vous n’avez que peu d’expérience. Par exemple, couper une chaîne de blancs en début et en fin de PHP est tout simplement
$string = trim($string);
En Perl c'est le peu plus cryptique
$string =~ s/^\s+//;
$string =~ s/\s+$//;
(Je crois que cela est légèrement plus efficace qu'une capture et un remplacement d'une seule ligne, et aussi un peu plus compréhensible.) Cependant, même si PHP est souvent plus anglais, il montre parfois encore les racines en tant que wrapper pour le niveau C bas, par exemple, strpbrk
et strspn
sont probablement rarement utilisées, car la plupart des PHP dabblers écrivent leurs propres fonctions équivalentes pour quoi que ce soit) trop ésotérique, plutôt que de passer du temps à explorer le manuel, je m'interroge également sur les programmeurs pour qui l'anglais est une langue seconde, car tout le monde est sur un pied d'égalité avec des choses telles que Perl et doit apprendre à partir de zéro.
J'ai déjà mentionné le manuel. PHP a un bon manuel en ligne, et malheureusement, il en a besoin. Je me réfère encore de temps en temps pour des choses qui devraient être simples, telles que l'ordre des paramètres ou la convention de nommage des fonctions. Avec Perl , vous vous rendrez probablement compte que vous vous référez au manuel un lot dès que vous commencez et qu’un jour vous aurez un A-ha moment et ne plus jamais en avoir besoin. Eh bien, du moins pas avant que vous ne soyez plus avancé et que vous réalisiez que non seulement il y a plus d'un moyen, il y a probablement un meilleur moyen, quelqu'un d'autre l'a déjà probablement fait fait cela mieux, et peut-être devriez-vous simplement visiter CPAN.
Perl a beaucoup plus d'options et de moyens d'exprimer les choses. Ce n'est pas nécessairement une bonne chose, même si cela permet au code d'être plus lisible s'il est utilisé à bon escient et au moins comme un des moyens que vous connaissez probablement. Vous tomberez dans certains styles et certains idiomes et je vous recommande vivement de lire Meilleures pratiques Perl (plus tôt que plus tard), ainsi que Livre de recettes Perl, Deuxième édition = se mettre au courant de la résolution des problèmes courants.
Je crois que la raison pour laquelle Perl est moins utilisé dans les environnements d'hébergement partagé est que, traditionnellement, la lenteur perçue de CGI et la réticence des hôtes à installer mod_Perl en raison de problèmes de sécurité et de configuration ont fait PHP Une option plus attrayante. Le cycle a ensuite continué, plus de gens ont appris à utiliser PHP parce que plus d’hôtes l’offraient et plus d’offres l’offraient parce que c’était ce que les gens voulaient utiliser. Les différences de vitesse et les problèmes de sécurité sont rendus sans objet par FastCGI ces jours-ci, et dans la plupart des cas PHP fonctionne également avec FastCGI, plutôt que de le laisser dans le coeur du Web serveur.
Que ce soit ou non le cas ou pour d'autres raisons, PHP est devenu populaire et une myriade d'applications y ont été écrites. Pour la majorité des personnes qui souhaitent simplement un site Web un simple blog ou une galerie de photos, PHP est tout ce dont ils ont besoin, c’est ce que promeuvent les hôtes. Rien ne devrait vous empêcher d’utiliser Perl (ou autre chose de votre choix) si vous le souhaitez.
Au niveau de l'entreprise, je doute que vous trouviez trop PHP en production (et s'il vous plaît, aucun point particulier à ) sur Facebook en tant que contre- Par exemple, j'ai dit niveau de l'entreprise ).
Ce que je préfère à propos de Perl, c'est la façon dont il gère les tableaux/listes. Voici un exemple de création et d'utilisation d'une fonction Perl (ou "sous-routine"), qui utilise ceci pour les arguments:
sub multiply
{
my ($arg1, $arg2) = @_; # @_ is the array of arguments
return $arg1 * $arg2;
}
Dans PHP, vous pourriez faire la même chose avec list()
, mais ce n'est pas tout à fait pareil; en Perl, les tableaux et les tableaux sont en fait traités de la même manière (généralement). Vous pouvez aussi faire des choses comme:
$week_day_name = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")[$week_day_index];
Et une autre différence que vous DEVEZ connaître est celle des opérateurs de comparaison numérique/chaîne. En Perl, si vous utilisez <
, >
, ==
, !=
, <=>
, Etc., Perl convertit les deux opérandes en Nombres. Si vous voulez plutôt convertir en chaînes, vous devez utiliser lt
, gt
, eq
, ne
, cmp
(les noms respectifs équivalents des opérateurs énumérés précédemment). Exemples où cela vous mènera vraiment:
if ("a" == "b") { ... } # This is true.
if ("a" == 0) { ... } # This is also true, for the same reason.
Perl est beaucoup utilisé pour les sites Web, pas moins que Python et Ruby par exemple. Cela dit, PHP est utilisé de manière Je pense que les facteurs les plus importants en sont la facilité de déploiement de PHP et sa facilité de démarrage.
Les différences de syntaxe sont trop nombreuses pour être résumées ici, mais il est généralement vrai qu’il existe plus de façons de s’exprimer (ceci est connu sous le nom de TIMTWOTDI, il existe plus d’une façon de le faire).
Je n'ai rien à ajouter à la réponse fantastique de outis, je veux seulement montrer la réponse à votre question:
Pourquoi Perl n'est-il plus très souvent utilisé pour les sites Web dynamiques? Qu'est-ce qui a rendu PHP plus populaire que cela?
S'il vous plaît vérifier d'abord quelques sites "Job Trends" - et vous pouvez faire le jugement seul.
comme vous pouvez le constater, Perl reste un leader, mais il est préférable pour les applications réelles, pas pour les jouets. :)