Я планирую изучить Perl 5, и, поскольку до сих пор я использовал только PHP, мне хотелось узнать немного о том, чем языки отличаются друг от друга.
Поскольку PHP начинался как набор «Perl-хаков», он явно клонировал некоторые функции Perls.
Каковы основные различия в синтаксисе? Верно ли, что с Perl у вас есть больше возможностей и способов выразить что-то?
Почему Perl больше не используется для динамических веб-сайтов? Что сделало PHP более популярным?
Ответы:
Perl и PHP больше чем похожи друг на друга. Давайте рассмотрим Perl 5, поскольку Perl 6 все еще находится в стадии разработки. Некоторые различия, примерно сгруппированные по тематике:
=~
,!~
), кавычки (qw
,qx
и т. Д.), Возведение в степень (**
), повторение строки (x
) и диапазон (..
и...
). В PHP есть несколько операторов, которых нет в Perl, например, оператор подавления ошибок (@
)instanceof
(хотя в Perl естьUniversal::isa
метод) иclone
.new
это оператор. В Perl это обычное имя подпрограммы создания объекта, определенной в пакетах, ничего особенного в том, что касается языка.Логические операторы Perl возвращают свои аргументы, а в PHP они возвращают логические значения . Пытаться:
на каждом языке. В Perl вы даже
$foo ||= 'default'
можете установить для $ foo значение, если оно еще не установлено. Самый короткий способ сделать это в PHP -$foo = isset($foo) ? $foo : 'default';
(Обновить, в PHP 7.0+ это можно сделать$foo = $foo ?? 'default'
)$foo
это переменная, отличная от@foo
или%foo
.extract
функции.undefined
(см. Perldata ). Массивы PHP немногочисленны; установка элемента не установит промежуточные элементы.array_slice
чтобы извлечь фрагмент иarray_splice
назначить его.local
ключевого слова.goto
функцию.Perl сглаживает списки (см. Perlsub ); для несглаженных структур данных используйте ссылки.
PHP не сглаживает массивы.
BEGIN
,UNITCHECK
,CHECK
,INIT
иEND
), которые выполняются. В отличие от PHPauto_prepend_file
иauto_append_file
, количество блоков кода каждого типа не ограничено. Кроме того, блоки кода определяются в сценариях, а параметры PHP устанавливаются в конфигурационных файлах сервера и для каждого каталога.$bam[-1]
- последний элемент массива. Отрицательные индексы в PHP - это индексы, как и любые другие.$obj->method(@args)
переводится на что-то вроде(ref $obj)::method($obj, @args)
. Неисчерпывающий список:$this
в методах. Perl передает ссылку на объект в качестве первого аргумента методов.@ISA
переменной пакетов .//
это оператор. В PHP это начало однострочного комментария.create_function
функции) и не было поддержки закрытий.$@
(eval
вместоtry
,die
вместоthrow
). МодульErrorTry :: Tiny поддерживает исключения, которые вы найдете на других языках (а также некоторые другие модули, перечисленные в разделе об ошибках, см. Также ).PHP был вдохновлен Perl так же, как Phantom of the Paradise был вдохновлен Phantom of the Opera , или Strange Brew был вдохновлен Гамлетом . При изучении Perl лучше забыть о особенностях поведения PHP, иначе вы запутаетесь.
У меня сейчас болит мозг, поэтому я собираюсь остановиться.
источник
@array = qw(a b c)
и вы делаете$array[4] = 'e'
, содержимое массива не совсем точно('a', 'b', 'c', undef, 'e')
; они('a', 'b', 'c',
отсутствуют ,'e')
. То есть в[3]
слоте нет указателя на скаляр undef; он вообще ничего не содержит (иexists
оператор проверяет это). Небольшая разница, но разница. :)$foo
если оно еще не установленоisset($foo) || $foo='default';
Когда на сцене появился PHP, всех поразили основные отличия от Perl:
<?php ... ?>
где угодно. Никаких скучных шаблонов.По прошествии времени все узнали, что они не приносят пользы, хе-хе ...
источник
Я заметил, что большинство страниц PHP и Perl кажутся
и тому подобное, и редко проводят разумные сравнения.
С точки зрения синтаксиса вы обнаружите, что PHP зачастую легче понять, чем Perl, особенно если у вас мало опыта. Например, обрезка строки из начальных и конечных пробелов в PHP просто
В Perl это несколько более загадочный
(Я считаю, что это немного более эффективно, чем захват и замена одной строки, а также немного более понятно.) Однако, хотя PHP часто больше похож на английский, он иногда все же показывает свои корни как оболочку для низкого уровня C, например,
strpbrk
иstrspn
, вероятно, редко используются, потому что большинство любителей PHP пишут свои собственные эквивалентные функции для чего-то слишком эзотерического, вместо того, чтобы тратить время на изучение руководства. Я также интересуюсь программистами, для которых английский является вторым языком, поскольку все равны с такими вещами, как Perl, и им приходится изучать его с нуля.Я уже упоминал руководство. У PHP есть прекрасное онлайн-руководство, и, к сожалению, оно ему необходимо. Я до сих пор время от времени обращаюсь к нему по поводу простых вещей, таких как порядок параметров или соглашение об именах функций. С Perl, вы, вероятно , найдете вы имеете в виду ручной в партии , как вы начали , а затем один день вы будете иметь АГА момент и никогда не понадобится снова. Что ж, по крайней мере, до тех пор, пока вы не станете более продвинутыми и не поймете, что не только существует более одного способа, но, вероятно, есть способ лучше, кто-то другой, вероятно, уже сделал это таким лучшим способом, и, возможно, вам просто стоит посетить CPAN.
У Perl гораздо больше возможностей и способов выразить вещи. Это не обязательно хорошо, хотя позволяет сделать код более читаемым, если использовать его с умом и, по крайней мере, одним из способов, с которым вы, вероятно, знакомы. Есть определенные стили и идиомы, в которые вы попадете, и я могу от всей души порекомендовать прочитать Perl Best Practices (раньше, чем позже) вместе с Perl Cookbook, Second Edition, чтобы быстро научиться решать типичные проблемы.
Я считаю, что причина, по которой Perl менее часто используется в средах общего хостинга, заключается в том, что исторически воспринимаемая медлительность CGI и нежелание хостов устанавливать mod_perl из-за проблем с безопасностью и конфигурацией сделали PHP более привлекательным вариантом. Затем цикл продолжился, все больше людей научились использовать PHP, потому что больше хостов предлагали его, и больше хостов предлагали его, потому что это то, что люди хотели использовать. В наши дни FastCGI не рассматривает различия в скорости и проблемы безопасности , и в большинстве случаев PHP также использует FastCGI, а не оставляет его в ядре веб-сервера.
Независимо от того, так ли это или есть другие причины, PHP стал популярным, и на нем было написано множество приложений. Для большинства людей, которым нужен веб-сайт начального уровня с простым блогом или фотогалереей, PHP - это все, что им нужно, так что это то, что продвигают хосты. Ничто не должно мешать вам использовать Perl (или что-то еще по вашему выбору), если вы хотите.
На уровне предприятия я сомневаюсь, что вы найдете слишком много PHP в производственной среде (и, пожалуйста, никто не указывает на Facebook в качестве контрпримера, я сказал на уровне предприятия ).
источник
$str =~ s/^\s+|\s+$//g;
Perl широко используется для веб-сайтов, не меньше, чем Python и Ruby, например. Тем не менее, PHP используется гораздо чаще, чем любой из них. Я думаю, что наиболее важными факторами при этом являются простота развертывания PHP и легкость его использования.
Различий в синтаксисе слишком много, чтобы здесь суммировать, но в целом верно, что у него есть больше способов выразить себя (это известно как TIMTWOTDI, есть более одного способа сделать это).
источник
Мне больше всего нравится в Perl то, как он обрабатывает массивы / списки. Вот пример того, как вы могли бы создать и использовать функцию Perl (или «подпрограмму»), которая использует это для аргументов:
В PHP вы могли бы сделать то же самое
list()
, но это не совсем то же самое; в Perl списки и массивы фактически обрабатываются одинаково (обычно). Вы также можете делать такие вещи, как:И еще одно отличие, о котором вы ДОЛЖНЫ знать, - это операторы сравнения чисел / строк. В Perl, если вы используете
<
,>
,==
,!=
,<=>
, и так далее, Perl преобразует оба операнда в числа. Если вы хотите , чтобы преобразовать как строки вместо этого, вы должны использоватьlt
,gt
,eq
,ne
,cmp
(соответствующие эквиваленты операторов перечисленных выше). Примеры, когда это действительно поможет:источник
Мне не нужно ничего добавлять к фантастическому ответу outis, я хочу показать ответ только на ваш вопрос:
Пожалуйста, проверьте сначала некоторые сайты "Тенденции вакансий" - и вы сможете принять решение самостоятельно.
Как видите, perl по-прежнему остается лидером - но предпочтительнее для реальных приложений, а не для игрушек. :)
источник