Как проверить / классифицировать CPAN-модули для правильности utf8 - PullRequest
13 голосов
/ 08 июня 2011

Вот отличный вопрос и замечательный tchrist * ответ с 7 + 24 + 52 советами и комментариями о том, как сделать perl-программу utf8 безопасной.

Но вот 19k модулей CPAN.Что можно сделать для различения «хороших» и «плохих»?(с точки зрения utf8)

Например: File::Slurp если вы прочитаете файл с помощью

#use strict encoding warnings utf8 autodie... etc....
my $str = read_file($file, binmode => ':utf8');

, вы получите разные результаты на основе параметров командной строки и perl -CSDA не будет работать.Печальный.(Да, я знаю, чем Encode :: decode ("utf8", read_file ($ file, binmode => ': raw')); поможет, но в любом случае SAD .

Мои вопросы:

  • здесь есть какой-либо предпочтительный способ, как проверить / классифицировать, какие CPAN-модули являются utf8 безопасными / готовыми / правильными?
  • вот какой-нибудь тест:: что-то уже сделано для тестирования utf8?
  • здесь что-то вроде Perl :: Critic для utf8 - что будет проверять источник модуля на возможную некорректность utf8? (потому что вручную проверять источники на 7 + 24 + 52 вещей я не могуклассифицировать как «простой способ программирования»)
  • или любым другим способом? :))

Я понимаю, что большинству модулей CPAN просто не нужно знать о utf8.Но вот что нужно другим.

Пожалуйста, не поймите меня неправильно. Я люблю язык Perl .Я знаю, что Perl обладает чрезвычайно мощными возможностями utf8.(особенно 5.14).Вышесказанное не имело значения как критика perl - но мне (и, возможно, некоторым другим тоже) нужно знать, какие модули CPAN в порядке, и как их классифицировать ...)

При разработке с использованием нескольких CPANмодулей, и изначально все идет хорошо, но в финальном тестировании вы обнаружите, что некоторые модули не поддерживают utf8, и, следовательно, часть вашей работы бесполезна - это действительно может вызвать некоторое разочарование.: (

Редактировать:

Я понимаю, что все сложные вещи, связанные с юникодом, имеют два корня:

  1. сам юникод - поскольку Чрист превосходно проанализировал некоторые изпроблемные моменты
  2. perl - просто не может сломать все рабочие модули, работающие серверы и т. д. - поэтому необходимо поддерживать обратную совместимость.

Моя единственная надежда: perl6. Is - это совершенно новый идругой язык. Не нужно поддерживать обратную совместимость. Поэтому я надеюсь, что в perl6 будет по умолчанию некоторые вещи, которые невозможно сделать в perl5, и все вещи utf8 будут намного более интуитивными.

Но вернемся к модулям: @daxim сказал: «Авторы даже не раскрывают, является ли их модуль безопасным от заражения, и эта функция существует десятилетиями!» - и это катастрофа. Может быть (может быть, и, честно говоря, понятия не имею, как это сделать), но, может быть, мы подошли к тому времени, когда нужно наложить гораздо более жесткие ограничения на представления CPAN.

С одной стороны, я действительно оченьppy с волонтерскими работами авторов CPAN.С другой стороны, публикация исходного кода не только похожа на свободу слова «правильно», но и должна подчиняться некоторым правилам.

Я понимаю, что почти невозможно совершить «революцию», но нам, вероятно, нужнонекоторая «эволюция».Может быть, пометить любой модуль CPAN, что не является безопасным utf8.Отметьте все, что не является безопасным.Отметьте (как здесь, в SO), какой модуль не соответствует минимальным стандартам кодирования, и удалите их.Может быть, я идеалист и / или наивный.:)

1 Ответ

8 голосов
/ 08 июня 2011

Холод, ситуация менее ужасна, чем ты думаешь.Никто, кроме tchrist, не оперирует этим уровнем корректности Юникода, также см. недавний комментарий Аристотеля .Как и все вещи, вы получаете 80% пути с 20% усилий.Это базовое усилие, а именно получение правильной темы кодировки символов , хорошо документировано;и jrockway повторяет это в своем ответе в этой теме.

Ответы на ваши конкретные вопросы:

  1. Нет, нет.Нет никаких согласованных усилий, чтобы собрать эту информацию в центральном месте.Вики Perl 5 можно использовать для документирования проблемных модулей, некоторые из них Джуэрд уже обсуждает в uniadvice .Я действительно хотел бы видеть утверждение каждого автора модуля в их документации, что «этот модуль DTRT WRT кодирование», но я не вижу, чтобы это произошло.Авторы даже не раскрывают, является ли их модуль безопасным от загрязнений, и эта функция существует в течение десятилетий!

  2. кодировка :: предупреждения может использоваться, чтобы выкурить непреднамереннообновления.Я упоминаю об этом в рабочем процессе Контрольного списка для перехода в Unicode с помощью Perl

  3. Вы не можете сделать это с помощью Perl :: Critic или статического анализа.Я не вижу другого способа, как знающие люди, тыкающие в модуль острыми символами, пока он не развалится (или нет), как только что прокомментировал Мирод.

...