Я планирую изучить Perl 5, и пока я до сих пор использовал PHP, я хотел немного узнать о том, как языки отличаются друг от друга.
Поскольку PHP начинался как набор "Perl-хаков", он, очевидно, клонировал некоторые функции Perls.
Каковы основные отличия в синтаксисе? Верно ли, что с Perl у вас есть больше возможностей и способов выразить что-то?
Почему Perl не используется для динамических веб-сайтов очень часто? Что сделало PHP более популярным?
Perl и PHP отличаются друг от друга. Пусть рассмотрим Perl 5, поскольку Perl 6 все еще находится в разработке. Некоторые различия, сгруппированные примерно по теме:
=~
, !~
), quote-like (qw
, qx
& c.), exponentiation (**
), строковое повторение (x
) и range (..
и ...
). PHP имеет несколько операторов Perl, например, оператор подавления ошибок (@
), instanceof
(хотя Perl имеет метод Universal::isa
) и clone
,new
является оператором. В Perl это условное имя подпрограмма создания объектов, определенная в пакетах, ничего особенного в том, что касается языка.Логические операторы Perl возвращают свои аргументы, а возвращают логические значения в PHP. Попробуйте:
$foo = '' || 'bar';
на каждом языке. В Perl вы даже можете сделать $foo ||= 'default'
, чтобы установить $foo в значение, если оно еще не установлено. Самый короткий способ сделать это в PHP - $foo = isset($foo) ? $foo : 'default';
(Update, в PHP 7.0+ вы можете сделать $foo = $foo ?? 'default'
)
$foo
- это другая переменная, чем @foo
или %foo
.extract
.undefined
(см. perldata). Массивы PHP разрежены; установка элемента не будет устанавливать промежуточные элементы.array_slice
для извлечения фрагмента и array_splice
, чтобы назначить срез.local
.goto
.Perl выравнивает списки (см. perlsub); для несплотнутых структур данных используйте ссылки.
@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 не сглаживает массивы.
BEGIN
, UNITCHECK
, CHECK
, INIT
и END
)), которые выполняются. В отличие от PHP auto_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
). PHP был вдохновлен Perl так же, как Phantom Рай был вдохновлен Phantom Opera, или Strange Brew был вдохновлен Гамлетом. Лучше всего ставить специфику поведения PHP из вашего ума при изучении Perl, иначе вы столкнетесь.
Мой мозг болит сейчас, поэтому я остановлюсь.
@array = qw(abc)
и вы делаете $array[4] = 'e'
, содержимое массива не совсем точно ('a', 'b', 'c', undef, 'e')
; они ('a', 'b', 'c',
несуществующие , 'e')
. То есть слот [3]
не содержит указатель на скаляр, который является undef; он вообще ничего не содержит (и для этого exists
операторские тесты). Небольшая разница, но разница. :)
Когда PHP появился на сцене, все были поражены основными отличиями от Perl:
<?php ... ?>
где угодно. Нет скучных шаблонов.С течением времени все узнали, что они не были полезны, хе-хе...
Я заметил, что большинство страниц PHP и Perl, похоже, относятся к
PHP лучше, чем Perl, потому что < insert lame reason here >
ilk, и редко делают разумные сравнения.
Синтаксис, вы найдете PHP часто легче понять, чем Perl, особенно если у вас мало опыта. Например, обрезка строки ведущего и конечного пробелов в PHP просто
$string = trim($string);
В Perl это несколько более загадочный
$string =~ s/^\s+//;
$string =~ s/\s+$//;
(Я считаю, что это немного более эффективно, чем захват и замена одной строки, а также немного понятнее.) Однако, хотя PHP часто более похож на английский, он иногда все еще показывает свои корни в качестве обертки для низких уровень C, например, strpbrk
и strspn
, вероятно, редко используются, потому что большинство PHP-dabblers пишут свои собственные эквивалентные функции для чего-то слишком эзотерического, а не тратят время на изучение руководства. Я также задаюсь вопросом о программистах, для которых английский является вторым языком, поскольку все находятся на равных с такими вещами, как Perl, которым нужно научиться с нуля.
Я уже упоминал руководство. PHP имеет прекрасное онлайн-руководство и, к сожалению, ему это нужно. Я по-прежнему отношусь к нему время от времени для вещей, которые должны быть простыми, таких как порядок параметров или соглашение об именовании функций. С Perl вы, вероятно, обнаружите, что по мере начала работы вы ссылаетесь на руководство a lot, а затем в один прекрасный день у вас будет момент a-ha и больше не понадобится. Ну, по крайней мере, пока вы не будете более продвинутыми и понимаете, что не только существует более одного пути, но, вероятно, есть лучший способ, кто-то еще, вероятно, уже сделал это лучше, и, возможно, вам стоит просто посетить CPAN.
У Perl есть намного больше вариантов и способов выражения вещей. Это не всегда хорошо, хотя это позволяет сделать код более читаемым, если его использовать разумно и, по крайней мере, одним из способов, с которым вы, вероятно, будете знакомы. Есть определенные стили и идиомы, в которые вы попадете, и я могу сердечно рекомендовать читать Perl Best Practices (раньше, чем позже), а также Perl Cookbook, Second Edition чтобы ускорить решение общих проблем.
Я считаю, что причина, по которой Perl используется реже в средах с общим хостингом, заключается в том, что исторически предполагаемая медленность отказа CGI и хостов от установки mod_perl из-за проблем с безопасностью и конфигурацией сделал PHP более привлекательным. Затем цикл продолжился, все больше людей научились использовать PHP, потому что предлагали его больше хостов, и многие хосты предлагали его, потому что это то, что люди хотели использовать. В наши дни разницы в скорости и проблемы с безопасностью выносятся FastCGI, и в большинстве случаев PHP также не работает с FastCGI, а не оставив его в ядре веб-сервера.
Независимо от того, происходит это или есть другие причины, PHP стал популярным, и в нем было написано множество приложений. Для большинства людей, которые просто хотят веб-сайт начального уровня с простым блогом или фотогалереей, PHP - это все, что им нужно, чтобы продвигались хосты. Не нужно ничего мешать вам использовать Perl (или что-нибудь еще, что вы выберете), если хотите.
На уровне предприятия, я сомневаюсь, что вы найдете слишком много PHP в производстве (и, пожалуйста, ни один пункт в Facebook в качестве контр-примера, я сказал, что уровень предприятия).
Моя любимая вещь о Perl - это способ обработки массивов/списков. Вот пример того, как вы будете использовать и использовать Perl-функцию (или "подпрограмму" ), которая использует это для аргументов:
sub multiply
{
my ($arg1, $arg2) = @_; # @_ is the array of arguments
return $arg1 * $arg2;
}
В PHP вы можете сделать аналогичную вещь с list()
, но это не совсем то же самое; в списках Perl и массивы фактически обрабатываются одинаково (обычно). Вы также можете делать такие вещи, как:
$week_day_name = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")[$week_day_index];
И еще одно отличие, о котором вы ДОЛЖНЫ знать, - это числовые/строковые операторы сравнения. В Perl, если вы используете <
, >
, ==
, !=
, <=>
и т.д., Perl преобразует оба операнда в числа. Если вы хотите вместо этого преобразовать строки, вы должны использовать lt
, gt
, eq
, ne
, cmp
(соответствующие эквиваленты операторов, перечисленных ранее). Примеры, когда это действительно поможет вам:
if ("a" == "b") { ... } # This is true.
if ("a" == 0) { ... } # This is also true, for the same reason.
Perl много используется для веб-сайтов, не менее, чем Python и Ruby. Тем не менее, PHP используется чаще, чем любой из них. Я думаю, что наиболее важными факторами в этом являются простота развертывания в PHP и легкость начать с него.
Различий в синтаксисе слишком много, чтобы суммировать здесь, но, как правило, это правда, что у него есть больше способов выразить себя (это известно как TIMTWOTDI, есть больше, чем один способ сделать это).
Мне не нужно добавлять что-либо к непредвиденному ответу, я хочу только показать ответ на ваш вопрос:
Почему Perl не используется для динамического сайты очень часто больше? То, что сделал PHP получает большую популярность, чем он?
Пожалуйста, сначала проверьте некоторые сайты "Тенденции работы", и вы можете сделать это самостоятельно.
как вы можете видеть, perl по-прежнему остается лидером, но предпочтительнее для реальных приложений, а не для игрушек.:)