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

Как тестировать/классифицировать модули CPAN для корректности utf8

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

Но вот 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 for utf8 - что будет проверять источник модуля на возможную ошибку utf8? (потому что вручную проверять источники для 7 + 24 + 52 вещей, которые я не могу классифицировать как "простой способ программирования" )
  • или любым другим способом?:)

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

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

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

Edit:

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

  • Нет, нет. Нет никаких согласованных усилий для сбора этой информации в центральном месте. Вики Perl 5 могут использоваться для документирования проблемных модулей, Юрд уже обсуждает некоторые из uniadvice. Мне бы очень хотелось увидеть выражение каждого автора модуля в своей документации, что "этот модуль DTRT w.r.t. enc.", но я не вижу, чтобы это происходило. Авторы не могут даже определить, является ли их модуль безопасным, и эта функция существует на протяжении десятилетий!

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

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