Подтвердить что ты не робот

Почему Perl - лучший выбор для большинства задач манипуляции строкой?

Я слышал, что Perl - это язык перехода для строковых манипуляций (и линейный шум;). Может ли кто-нибудь предоставить примеры и сравнения с другими языками, чтобы показать мне, почему?

4b9b3361

Ответ 1

Это очень субъективно, поэтому я бы не сказал, что Perl - лучший выбор, но это, безусловно, правильный выбор для манипуляции с строкой. Другими альтернативами являются Tcl, Python, AWK и т.д.

Мне нравятся функции Perl, потому что у него отличная поддержка (лучше, чем POSIX, как указано в комментарии) для быстрых регулярных выражений, а неявные переменные упрощают выполнение базового хрустания строк с очень маленьким кодом.

Если у вас есть фон * nix, то многое из того, что вы уже знаете, применимо и к Perl, что делает его довольно легко подобрать для многих людей.

Ответ 2

Perl → Практический язык извлечения и отчетности

Сила Perl (когда дело доходит до строковой обработки) лежит в ней очень мощным механизм регулярных выражений.

Из-за этого в области BioInformatics есть много людей, использующих Perl как их главный инструмент, следовательно, большое количество сообщений о BioPerl на PerlMonks. В BioInformatics они много работают со строками, они называют их "последовательностями" (я мало знаю об этом).

Perlmonks.org - это сердце сообщества Perl, проверьте огромное количество обращений при поиске сайта: perlmonks.org regex 20 000 просмотров

Вы не можете игнорировать огромное количество модулей на CPAN:

Это очень убедительное доказательство того, что Perl - очень мощный язык, когда дело доходит до обработки строк.

Итак, если вы хотите выполнить некоторую строчную обработку, и вы используете Perl, вы ее покрыли:)

Ответ 3

Чтобы ответить на вторую часть вашего вопроса: репутация Perl для линейного шума исходит от 4-х людей:

  • Слишком умные (для своих же благ) хакеры (или иногда просто хаки), которые ценят ум и демонстрируют читаемость. "Если было трудно написать, это должно быть трудно читать", это не просто мифическое отношение.

  • Люди, которые не знали бы хорошего развития программного обеспечения, если он ударил их по голове с помощью cluebat. Например, люди, которые сохраняют пару символов в программе, используя $_ вместо именованной переменной. Вложенной области. Или никогда не слышал комментариев. Или самодокументирующие идентификаторы. Или пробелы.

  • Люди, которые считают, что разработка программного обеспечения == code golf. Более серьезно, что чем меньше количество символов в коде, тем оно более читаемо, потому что они неправильно понимают, что означает "лаконичность" в коде.

    (ПРИМЕЧАНИЕ: первые 2 набора не являются взаимоисключающими)

  • Люди, которые кодируют/взламывают perl (например, SysAdmins), у которых очень мало тренировок, опыта или стимулов для разработки программного обеспечения. Например. процент людей, использующих Perl, которые делают быстрые и грязные хаки с плохим стилем и хуже качество кода, вероятно, выше, чем, скажем, Python.

    Просто для справки, 80% ужасного Perl-кода в моей работе $подпадают под это - это было написано финансовыми аналитиками, которые достаточно умны, чтобы забрать книгу Perl и некоторые более ранние скрипты, клонировали script который делает то, что нужно бизнесу, и не имеет основы CS/программирования, чтобы беспокоиться о том, насколько читабельным/поддерживаемым их код был.

В других (и менее скудных) словах вы можете написать красивое, невероятно удобочитаемое и простое в использовании программное обеспечение в Perl. Все зависит от того, кто пишет, каковы их приоритеты и навыки. Кроме того, , как и любой другой язык, вы можете написать с ним жалкий беспорядок для записи.

Отличие от других языков заключается в том, что очень часто единственная письменность упомянутого беспорядка, когда это делается в Perl, действительно состоит из очень высокой плотности небуквенных символов (сигиллов и специальных символов в плохо написанных RegExes). Эта высокая плотность может действительно асимптотически приближать линейный шум.

Ответ 4

Потому что это то, что сделано perl. Потому что Perl является выразительным, мощным и быстрым. Я несколько раз избивал специализированные продукты с небольшим и грязным script в perl, написанным за несколько минут. Например, внешнее соединение и большое соединение с MySQL (просто потому, что не могут объединить объединение), обработка ETL и Java Hadoop (потому что у меня есть многолетний опыт, чтобы написать ее эффективно, и уровень ввода-вывода perl просто отличный) и так далее.

Ответ 5

Это очень субъективный вопрос. Возможно, истинный ответ заключается в том, что Perl имеет хороший синтаксис (включая синтаксис регулярных выражений), который заставляет людей хотеть подписать его высокие оценки по сравнению с другими языками? ИМХО, любой язык, поддерживающий синтаксис с сильным регулярным выражением, был бы достаточно мощным при манипулировании строкой.

Ответ 6

Дети в эти дни! В тот же день все, что у нас было, было SNOBOL - и нам это понравилось! Попробуйте это когда-нибудь... вы никогда не знаете, вы можете захотеть чего-то респектабельного, чтобы отпасть, когда эта прихоть Perl пройдет курс!

Ответ 7

Perl широко используется для задач манипуляции строками, поскольку его API манипуляции с строками легко узнать. А также широко используется его регулярное выражение. Он используется в течение очень долгого времени, и любой, у кого есть фон Unix, очень легко подберет perl. Исторически perl был разработан в конце 80 для задач обработки отчетов и был "изначально" разработан для задач обработки текста. Таким образом, до даты тенденция сохраняется, так как любой, у кого есть задача манипулирования строкой или задача обработки текста, выбрала бы perl в качестве первого выбора. Это не то, что другие языки, такие как python arent до задачи, но perl популярны в этой области.

Ответ 8

Мне нравится Perl много, писать книги об этом, публиковать журнал об этом и т.д. Я не думаю, что когда-либо буду говорить, что это лучший язык, чтобы что-то сделать. Многое связано с задачей, которую вам нужно сделать. Для многих задач обработки строк, ETL, очистки данных и т.д. Perl - очень сильный и способный язык. У вас не было бы столько проблем с выполнением простых задач.

Ваш комментарий звучит так, как будто он появился с начала 1990-х годов, хотя остальной мир не догнал. Многие из динамических языков теперь соответствуют задаче, поэтому вам может не потребоваться переключение языков. Если вы решите использовать Perl и столкнуться с проблемами, здесь есть много людей, которые готовы помочь, и не все из нас будут винить вас, если вы выберете что-то еще.:)

Ответ 9

В начале Perl был разработан для легкой обработки отчетов и обработки текстовых файлов, таким образом, он получил очень сильную поддержку REGEX. Большая часть информации об REGEX вы можете найти в perldoc.

Ответ 10

Я не согласен с тем, что Perl - лучший язык для обработки текста. Простые вещи легки; заменить foo на bar:

$data =~ s/foo/bar/g;

Более трудные вещи не просты. Посмотрите Data::SExpression, например. Очень много кода, чтобы сделать что-то очень простое.

Аналогичная реализация в Haskell с PArrow выглядит примерно так:

import Text.ParserCombinators.PArrow

data Atom = QuotedString String | Symbol String
          deriving (Show, Eq)

data Sexp = Sexp [Sexp] | Atom Atom
          deriving (Eq)


quotedString :: Char -> Char -> MD a Atom
quotedString quoteChar escapeChar = between q q inside >>^ QuotedString
    where q = char quoteChar
          inside = many $ (char escapeChar >>> anyChar) <+> notChar quoteChar

doubleQuotedString, symbol :: MD a Atom
doubleQuotedString = quotedString '"' '\\'
symbol = word >>^ Symbol

atom, sexp :: MD a Sexp
atom = (doubleQuotedString <+> symbol) >>^ Atom
sexp = atom <+> (between (char '(') (char ')') sexp' >>^ Sexp)
       where sexp' = sepBy1 sexp spaces

Просто скажи. Perl - это не все-и-все-текстовые манипуляции. Есть много причин предпочесть Perl другим языкам, но разбор не является одним из них.

Ответ 11

Perl долгое время был языком перехода. Проблема в том, что это может быть довольно грязно и сложно поддерживать (некоторые могут писать Perl, что позволяет избежать этого, но очень легко написать уродливый код). Я бы не сказал вам избегать Perl, но многие перешли к некоторым современным альтернативам.

Я бы рекомендовал изучить один из новых языков сценариев, таких как Python или Ruby. Оба будут работать очень хорошо для ваших нужд и могут легко справиться с более сложными задачами позже. Они оба неплохо работают, написав C и Perl так долго.

Короче говоря, Perl был бы хорошим молотом для этого гвоздя. Python и Ruby были бы гвоздями.