Planuję nauczyć się Perla 5, a ponieważ do tej pory korzystałem tylko z PHP, chciałem dowiedzieć się trochę o tym, jak języki różnią się od siebie.
Gdy PHP zaczęło się jako zestaw "hacków Perla", oczywiście sklonował niektóre funkcje Perlsa.
Jakie są główne różnice w składni? Czy to prawda, że z Perlem masz więcej opcji i sposobów wyrażenia czegoś?
Dlaczego Perl nie jest już bardzo często używany do dynamicznych witryn internetowych? Co sprawiło, że PHP zyskało większą popularność?
Odpowiedzi:
Perl i PHP różnią się bardziej niż podobne. Rozważmy Perl 5, ponieważ Perl 6 jest wciąż w fazie rozwoju. Niektóre różnice, z grubsza pogrupowane tematycznie:
=~
,!~
), cudzysłowy (qw
,qx
& c.), Potęgowanie (**
), powtórzenie ciągów (x
) i zakres (..
i...
). PHP ma kilka operatorów, których Perl nie ma, na przykład operator eliminacji błędów (@
)instanceof
(chociaż Perl maUniversal::isa
metodę) iclone
.new
jest operatorem. W Perlu jest to konwencjonalna nazwa podprogramu tworzenia obiektów zdefiniowanego w pakietach, nic specjalnego, jeśli chodzi o język.Operatory logiczne Perla zwracają swoje argumenty, podczas gdy w PHP zwracają wartości logiczne . Próbować:
w każdym języku. W Perlu możesz nawet
$foo ||= 'default'
ustawić $ foo na wartość, jeśli nie jest jeszcze ustawiona. Najkrótszym sposobem na zrobienie tego w PHP jest$foo = isset($foo) ? $foo : 'default';
(Aktualizacja, w PHP 7.0+ możesz to zrobić$foo = $foo ?? 'default'
)$foo
jest inną zmienną niż@foo
lub%foo
.extract
funkcji.undefined
(patrz perldata ). Tablice PHP są rzadkie; ustawienie elementu nie ustawi elementów interweniujących.array_slice
do wyodrębniania plastra iarray_splice
przypisywania do plasterka.local
słowa kluczowego.goto
funkcję.Perl spłaszcza listy (zobacz perlsub ); w przypadku niespłaszczonych struktur danych użyj odniesień.
PHP nie spłaszcza tablic.
BEGIN
,UNITCHECK
,CHECK
,INIT
iEND
), które są wykonywane. W przeciwieństwie do PHPauto_prepend_file
iauto_append_file
, nie ma ograniczeń co do liczby bloków kodu każdego typu. Ponadto bloki kodu są definiowane w skryptach, podczas gdy opcje PHP są ustawiane w plikach konfiguracyjnych serwera i poszczególnych katalogów.$bam[-1]
jest ostatnim elementem tablicy. Negatywne indeksy dolne w PHP są indeksami takimi jak inne.$obj->method(@args)
zostanie przetłumaczony na coś takiego jak(ref $obj)::method($obj, @args)
. Niewyczerpująca lista:$this
w metodach. Perl przekazuje referencję do obiektu jako pierwszy argument do metod.@ISA
zmiennej packages .//
jest operatorem. W PHP jest to początek jednowierszowego komentarza.create_function
funkcji) i nie było wsparcia dla zamknięć.$@
(eval
zamiasttry
,die
zamiastthrow
). ModułErrorTry :: Tiny obsługuje wyjątki, które można znaleźć w innych językach (a także niektóre inne moduły wymienione w sekcji Error's See Also ).PHP zostało zainspirowane Perlem w taki sam sposób, w jaki Phantom of the Paradise został zainspirowany Phantom of the Opera , czy Strange Brew został zainspirowany Hamletem . Podczas nauki języka Perl najlepiej jest zapomnieć o zachowaniach PHP, bo inaczej wpadniesz w błąd.
Boli mnie teraz mózg, więc przestanę.
źródło
@array = qw(a b c)
i robisz$array[4] = 'e'
, zawartość tablicy nie jest dokładnie('a', 'b', 'c', undef, 'e')
; oni('a', 'b', 'c',
nie istnieją ,'e')
. Oznacza to, że[3]
slot nie zawiera wskaźnika do skalara, który jest undef; w ogóle nic nie zawiera (aexists
operator sprawdza to). Mała różnica, ale różnica. :)$foo
jeśli nie jest jeszcze ustawiona, może byćisset($foo) || $foo='default';
Kiedy PHP pojawił się na scenie, wszyscy byli pod wrażeniem głównych różnic w stosunku do Perla:
<?php ... ?>
wszędzie. Żadnych nudnych szablonów.Z biegiem czasu wszyscy nauczyli się, że nie są korzyścią, hehe ...
źródło
Zauważyłem, że większość stron PHP i Perl wydaje się mieć rozszerzenie
podobne i rzadko dokonują rozsądnych porównań.
Jeśli chodzi o składnię, przekonasz się, że PHP jest często łatwiejsze do zrozumienia niż Perl, szczególnie jeśli masz niewielkie doświadczenie. Na przykład, przycinanie ciągu początkowych i końcowych białych znaków w PHP jest proste
W Perlu jest to nieco bardziej tajemnicze
(Uważam, że jest to nieco bardziej wydajne niż przechwytywanie i zastępowanie pojedynczej linii, a także trochę bardziej zrozumiałe). Jednak mimo że PHP jest często bardziej podobne do angielskiego, czasami nadal pokazuje swoje korzenie jako opakowanie dla niskiego poziomu C, na przykład,
strpbrk
istrspn
prawdopodobnie są rzadko używane, ponieważ większość amatorów PHP pisze własne równoważne funkcje dla czegoś zbyt ezoterycznego, zamiast spędzać czas na zgłębianiu podręcznika. Zastanawiam się też nad programistami, dla których angielski jest drugim językiem, ponieważ wszyscy są na równi z takimi rzeczami jak Perl, muszą uczyć się go od podstaw.Wspomniałem już o instrukcji. PHP ma dobrą instrukcję online i niestety jej potrzebuje. Nadal odwołuję się od czasu do czasu w sprawach, które powinny być proste, takie jak kolejność parametrów lub konwencja nazewnictwa funkcji. Z Perl, znajdziesz prawdopodobnie masz na myśli ręcznego w partii , jak zacząć, a potem pewnego dnia będziesz miał a-ha chwila i nigdy nie trzeba go ponownie. Cóż, przynajmniej nie, dopóki nie staniesz się bardziej zaawansowany i nie zdasz sobie sprawy, że nie tylko jest więcej niż jeden sposób, ale prawdopodobnie jest lepszy, ktoś inny prawdopodobnie już to zrobił w lepszy sposób i być może powinieneś po prostu odwiedzić CPAN.
Perl ma o wiele więcej opcji i sposobów wyrażania rzeczy. Niekoniecznie jest to dobra rzecz, chociaż pozwala na lepszą czytelność kodu, jeśli jest używany mądrze i co najmniej w jeden ze sposobów, które prawdopodobnie znasz. Są pewne style i idiomy, w które się wpadniesz, i serdecznie polecam przeczytanie Perl Best Practices (raczej prędzej niż później), wraz z Perl Cookbook, Second Edition , aby przyspieszyć rozwiązywanie typowych problemów.
Uważam, że przyczyną rzadszego używania Perla we współdzielonych środowiskach hostingowych jest to, że w przeszłości postrzegana powolność CGI i niechęć hostów do instalowania mod_perl ze względu na problemy z bezpieczeństwem i konfiguracją uczyniły PHP bardziej atrakcyjną opcją. Cykl był kontynuowany, więcej ludzi nauczyło się używać PHP, ponieważ oferowało go więcej hostów, a więcej hostów oferowało to, ponieważ ludzie chcieli tego używać. W dzisiejszych czasach FastCGI podważa różnice w szybkości i problemy z bezpieczeństwem , aw większości przypadków w PHP brakuje również FastCGI, zamiast pozostawiać je w rdzeniu serwera WWW.
Niezależnie od tego, czy tak jest, czy też są inne powody, PHP stało się popularne i zostało w nim napisanych mnóstwo aplikacji. Dla większości ludzi, którzy chcą mieć stronę internetową dla początkujących z prostym blogiem lub galerią zdjęć, PHP jest wszystkim, czego potrzebują, więc to właśnie promują gospodarze. Nic nie powinno powstrzymywać Cię przed używaniem Perla (lub czegokolwiek innego, co wybierzesz), jeśli chcesz.
Na poziomie przedsiębiorstwa wątpię, byś znalazł zbyt dużo PHP w produkcji (i proszę, nikt nie wskazał Facebooka jako kontrprzykładu, powiedziałem na poziomie przedsiębiorstwa ).
źródło
$str =~ s/^\s+|\s+$//g;
Perl jest często używany w witrynach internetowych, nie mniej niż na przykład Python i Ruby. To powiedziawszy, PHP jest używane znacznie częściej niż którekolwiek z nich. Myślę, że najważniejszymi czynnikami są łatwość wdrożenia PHP i łatwość rozpoczęcia z nim.
Różnic w składni jest zbyt wiele, aby je tutaj podsumować, ale ogólnie jest prawdą, że ma więcej sposobów wyrażania siebie (jest to znane jako TIMTWOTDI, istnieje więcej niż jeden sposób, aby to zrobić).
źródło
Moją ulubioną rzeczą w Perlu jest sposób, w jaki obsługuje on tablice / listy. Oto przykład, jak można utworzyć i używać funkcji Perla (lub „procedury podrzędnej”), która wykorzystuje to jako argumenty:
W PHP można by zrobić coś podobnego
list()
, ale to nie jest to samo; w Perlu listy i tablice są faktycznie traktowane tak samo (zwykle). Możesz też:Kolejną różnicą, o której MUSISZ wiedzieć, są operatory porównania liczb / łańcuchów. W Perl, jeśli używasz
<
,>
,==
,!=
,<=>
, i tak dalej, Perl konwertuje oba operandy do liczb. Jeśli chcesz przekonwertować jako ciągi zamiast tego trzeba użyćlt
,gt
,eq
,ne
,cmp
(odpowiednie równoważniki podmioty wymienione wcześniej). Przykłady, w których to naprawdę Ci pomoże:źródło
Nie muszę niczego dodawać do fantastycznej odpowiedzi outis, chcę tylko pokazać odpowiedź na Twoje pytanie:
Najpierw sprawdź kilka witryn „Trendy w pracy” - i możesz samodzielnie dokonać oceny.
jak widać, Perl nadal jest liderem - ale preferowany do prawdziwych zastosowań, a nie do zabawek. :)
źródło