Ich habe vor, Perl 5 zu lernen, und da ich bisher nur PHP verwendet habe, wollte ich ein bisschen wissen, wie sich die Sprachen voneinander unterscheiden.
Als PHP als eine Reihe von "Perl-Hacks" begann, hat es offensichtlich einige Perls-Funktionen geklont.
Was sind die Hauptunterschiede in der Syntax? Stimmt es, dass Sie mit Perl mehr Möglichkeiten und Möglichkeiten haben, etwas auszudrücken?
Warum wird Perl nicht mehr sehr oft für dynamische Websites verwendet? Was hat PHP immer beliebter gemacht?
Antworten:
Perl und PHP unterscheiden sich mehr als gleich. Betrachten wir Perl 5, da sich Perl 6 noch in der Entwicklung befindet. Einige Unterschiede, grob nach Themen gruppiert:
=~
,!~
), Zitat-like (qw
,qx
usw.), Potenzierung (**
), String - Wiederholung (x
) und Reichweite (..
und...
). PHP hat einige Operatoren, die Perl nicht hat, wie den Fehlerunterdrückungsoperator (@
)instanceof
(obwohl Perl dieUniversal::isa
Methode hat) undclone
.new
ist ein Operator. In Perl ist dies der herkömmliche Name einer in Paketen definierten Unterroutine zur Objekterstellung, die in Bezug auf die Sprache nichts Besonderes ist.Logische Perl-Operatoren geben ihre Argumente zurück, während sie in PHP Boolesche Werte zurückgeben . Versuchen:
in jeder Sprache. In Perl können Sie sogar
$foo ||= 'default'
$ foo auf einen Wert setzen, falls dieser noch nicht festgelegt ist. Der kürzeste Weg, dies in PHP zu tun, ist$foo = isset($foo) ? $foo : 'default';
(Update, in PHP 7.0+ können Sie dies tun$foo = $foo ?? 'default'
)$foo
eine andere Variable als@foo
oder%foo
.extract
Funktion.undefined
(siehe Perldata ). PHP-Arrays sind spärlich; Durch das Setzen eines Elements werden keine dazwischenliegenden Elemente gesetzt.array_slice
extrahieren Sie ein Slice undarray_splice
weisen es einem Slice zu.local
Schlüsselwort.goto
Funktion.Perl glättet Listen (siehe Perlsub ); Verwenden Sie für nicht abgeflachte Datenstrukturen Referenzen.
PHP reduziert Arrays nicht.
BEGIN
,UNITCHECK
,CHECK
,INIT
undEND
) , die ausgeführt werden. Im Gegensatz zu PHPsauto_prepend_file
undauto_append_file
gibt es keine Begrenzung für die Anzahl der einzelnen Codeblocktypen. Außerdem werden die Codeblöcke in den Skripten definiert, während die PHP-Optionen in den Konfigurationsdateien für Server und pro Verzeichnis festgelegt werden.$bam[-1]
ist das letzte Element des Arrays. Negative Indizes in PHP sind Indizes wie alle anderen.$obj->method(@args)
in so etwas übersetzt(ref $obj)::method($obj, @args)
. Nicht erschöpfende Liste:$this
in Methoden bereit . Perl übergibt einen Verweis auf das Objekt als erstes Argument an Methoden.@ISA
.//
ist ein Operator. In PHP beginnt ein einzeiliger Kommentar.create_function
Funktion) und keine Unterstützung für Schließungen.$@
(eval
anstelle vontry
,die
anstelle vonthrow
). DasErrorTry :: Tiny- Modul unterstützt Ausnahmen, da Sie sie in anderen Sprachen finden (sowie einige andere Module, die im Abschnitt Siehe auch Siehe Fehler aufgeführt sind ).PHP wurde von Perl genauso inspiriert wie Phantom of the Paradise von Phantom of the Opera oder Strange Brew von Hamlet . Es ist am besten, die Verhaltensspezifikationen von PHP beim Lernen von Perl aus dem Kopf zu verlieren, sonst werden Sie gestolpert.
Mein Gehirn tut jetzt weh, also werde ich aufhören.
quelle
@array = qw(a b c)
und Sie tun$array[4] = 'e'
, ist der Inhalt des Arrays nicht genau('a', 'b', 'c', undef, 'e')
; sie sind('a', 'b', 'c',
nicht vorhanden ,'e')
. Das heißt, der[3]
Slot enthält keinen Zeiger auf einen Skalar, der undef ist. es enthält überhaupt nichts (und derexists
Bediener testet dies). Ein kleiner Unterschied, aber ein Unterschied. :)$foo
isset($foo) || $foo='default';
Als PHP auf die Bühne kam, waren alle beeindruckt von den Hauptunterschieden zu Perl:
<?php ... ?>
überall. Keine langweiligen Vorlagen.Im Laufe der Zeit erfuhren alle, dass sie kein Vorteil waren, hehe ...
quelle
Ich habe festgestellt, dass die meisten PHP- und Perl-Seiten von der Seite zu sein scheinen
ilk, und machen selten vernünftige Vergleiche.
In Bezug auf die Syntax werden Sie feststellen, dass PHP oft einfacher zu verstehen ist als Perl, insbesondere wenn Sie wenig Erfahrung haben. Das Trimmen einer Zeichenfolge führender und nachfolgender Leerzeichen in PHP ist beispielsweise einfach
In Perl ist es etwas kryptischer
(Ich glaube, dies ist etwas effizienter als das Erfassen und Ersetzen einzelner Zeilen und auch ein wenig verständlicher.) Obwohl PHP oft englischer ist, zeigt es manchmal immer noch seine Wurzeln als Wrapper für Low Level C, Zum Beispiel
strpbrk
undstrspn
werden wahrscheinlich selten verwendet, da die meisten PHP-Dabbler ihre eigenen äquivalenten Funktionen für etwas zu Esoterisches schreiben, anstatt Zeit damit zu verbringen, das Handbuch zu erkunden. Ich wundere mich auch über Programmierer, für die Englisch eine zweite Sprache ist, da jeder mit Dingen wie Perl gleichgestellt ist und es von Grund auf lernen muss.Ich habe das Handbuch bereits erwähnt. PHP hat ein gutes Online-Handbuch und braucht es leider. Ich beziehe mich immer noch von Zeit zu Zeit auf Dinge, die einfach sein sollten, wie die Reihenfolge der Parameter oder die Namenskonvention für Funktionen. Mit Perl, werden Sie wahrscheinlich finden Sie in der Bedienungsanleitung ein beziehst viel wie Sie beginnen und dann eines Tages erhalten Sie eine haben a-ha Moment und es nie wieder brauchen. Nun, zumindest nicht, bis Sie fortgeschrittener sind und erkennen, dass es nicht nur mehr als einen Weg gibt, sondern wahrscheinlich auch einen besseren, jemand anderes hat es wahrscheinlich schon besser gemacht, und vielleicht sollten Sie einfach CPAN besuchen.
Perl hat viel mehr Möglichkeiten und Möglichkeiten, Dinge auszudrücken. Dies ist nicht unbedingt eine gute Sache, obwohl es Code ermöglicht, besser lesbar zu sein, wenn es mit Bedacht verwendet wird, und zumindest eine der Möglichkeiten, mit denen Sie wahrscheinlich vertraut sind. Es gibt bestimmte Stile und Redewendungen, in die Sie verfallen werden, und ich kann Ihnen wärmstens empfehlen, Perl Best Practices (eher früher als später) zusammen mit Perl Cookbook, Second Edition, zu lesen , um sich mit der Lösung häufiger Probleme vertraut zu machen.
Ich glaube, der Grund, warum Perl in gemeinsam genutzten Hosting-Umgebungen seltener verwendet wird, ist, dass PHP aufgrund der wahrgenommenen Langsamkeit von CGI und der mangelnden Bereitschaft von Hosts, mod_perl aufgrund von Sicherheits- und Konfigurationsproblemen zu installieren , PHP zu einer attraktiveren Option gemacht hat. Der Zyklus ging dann weiter, mehr Menschen lernten, PHP zu verwenden, weil mehr Hosts es anboten, und mehr Hosts boten es an, weil die Leute dies nutzen wollten. Die Geschwindigkeitsunterschiede und Sicherheitsprobleme werden heutzutage von FastCGI in Frage gestellt, und in den meisten Fällen wird PHP auch nicht mehr mit FastCGI betrieben, anstatt es im Kern des Webservers zu belassen.
Unabhängig davon, ob dies der Fall ist oder aus anderen Gründen, wurde PHP populär und es wurden unzählige Anwendungen darin geschrieben. Für die Mehrheit der Leute, die nur eine Einstiegswebsite mit einem einfachen Blog oder einer Fotogalerie wollen, ist PHP alles, was sie brauchen. Das ist es, was die Gastgeber fördern. Es sollte nichts Sie daran hindern, Perl (oder etwas anderes, das Sie wählen) zu verwenden, wenn Sie möchten.
Auf Unternehmensebene bezweifle ich, dass Sie zu viel PHP in der Produktion finden würden (und bitte, niemand auf Facebook als Gegenbeispiel, sagte ich auf Unternehmensebene ).
quelle
$str =~ s/^\s+|\s+$//g;
Perl wird häufig für Websites verwendet, nicht weniger als Python und Ruby. Trotzdem wird PHP viel häufiger verwendet als alle anderen. Ich denke, die wichtigsten Faktoren dafür sind die einfache Bereitstellung von PHP und die Leichtigkeit, damit zu beginnen.
Die Unterschiede in der Syntax sind zu groß, um sie hier zusammenzufassen, aber im Allgemeinen gibt es mehr Möglichkeiten, sich auszudrücken (dies wird als TIMTWOTDI bezeichnet, es gibt mehr als eine Möglichkeit, dies zu tun).
quelle
Meine Lieblingssache bei Perl ist der Umgang mit Arrays / Listen. Hier ist ein Beispiel, wie Sie eine Perl-Funktion (oder "Unterroutine") erstellen und verwenden würden, die dies für Argumente verwendet:
In PHP könnten Sie etwas Ähnliches tun
list()
, aber es ist nicht ganz dasselbe. In Perl werden Listen und Arrays (normalerweise) tatsächlich gleich behandelt. Sie können auch Dinge tun wie:Ein weiterer Unterschied, den Sie kennen müssen, sind numerische / String-Vergleichsoperatoren. Wenn Sie in Perl verwenden
<
,>
,==
,!=
,<=>
, und so weiter, wandelt Perl beiden Operanden in Zahlen. Wenn Sie als Strings statt konvertieren wollen, müssen Sie verwendenlt
,gt
,eq
,ne
,cmp
(die entsprechende Äquivalente der Betreiber zuvor aufgeführten). Beispiele, bei denen Sie dies wirklich erreichen:quelle
Ich muss der fantastischen Antwort von outis nichts hinzufügen, ich möchte nur die Antwort für Ihre Frage zeigen:
Bitte überprüfen Sie zuerst einige "Job Trends" -Seiten - und Sie können das Urteil alleine fällen.
Wie Sie sehen können, ist Perl immer noch führend - aber für echte Anwendungen vorzuziehen, nicht für Spielzeug. :) :)
quelle