Почему бы не "использовать utf-8;" работать при использовании внутри модуля Perl? - PullRequest
0 голосов
/ 04 апреля 2019

У нас была ошибка в библиотеке, которая была вызвана тем, что один из входов был Unicode.

Это было исправлено добавлением use utf8; к сценарию, использующему эту библиотеку.

ОднакоДобавление use utf8; в саму библиотеку (так что ВСЕ сценарии, использующие эту библиотеку, будут исправлены) не дало результата.

Почему?Можно ли это решить?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2019

use utf8; сообщает Perl, что текущий файл закодирован с использованием UTF-8.

У вас есть сценарий, который закодирован с использованием UTF-8, поэтому вам пришлось добавить use utf8; к сценарию. (Без этого вы можете подумать, что у вас есть my $x = "é";, но вы говорите Perl my $x = "é";.)

Добавление его в модуль не имеет смысла, если это скрипт, который закодирован с использованием UTF-8. Директива должна быть добавлена ​​к каждому файлу (скрипту или модулю), который закодирован с использованием UTF-8. (Если вы передадите плохой $x в модуль, и из-за этого модуль создаст ненужные файлы, это все еще сценарий, который необходимо исправить.)

3 голосов
/ 04 апреля 2019

С документация :

Прагма utf8 указывает парсеру Perl разрешить UTF-8 в тексте программы в текущей лексической области.

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

PS: я понимаю, что вы имели в виду use utf8, а не use utf-8 (последнее не является действительной прагмой).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...