РЕДАКТИРОВАТЬ (поскольку я, очевидно, забрел в область знаний о Христе).Пропустите, используя $response->content
, который всегда возвращает необработанную байтовую строку, и используйте $response->decoded_content
, который применяет любые подсказки декодирования, которые он получает из заголовков ответа.
Загружаемая страница имеет формат UTF-8.закодирован, но вы не читаете его как UTF-8 (честно говоря, на странице нет никаких подсказок о том, что такое кодировка [обновление: сервер возвращает заголовок Content-Type: text/html; charset=utf-8
, хотя]).
Вы можете увидеть это, если изучите $response->content
:
use List::Util 'max';
my $max_ord = max map{ord}split //, $response->content;
print "max ord of response content is $max_ord\n";
Если вы получите значение меньше 256, то вы читаете этот контент как необработанные байты, и ваши строкиникогда не будет соответствовать /\p{Arabic}/
.Вы должны расшифровать ввод как UTF-8, прежде чем применять регулярное выражение:
use Encode;
my $content = decode('utf-8', $response->content);
# now check $content =~ /\p{Arabic}/
Иногда (и теперь я далеко за пределами моей области знаний) загружаемая страница содержит подсказки о том, как она декодируетсяи $response->content
уже может быть правильно декодирован.В этом случае вызов decode
выше не нужен и может быть вредным.См. другие сообщения SO по обнаружению кодировки произвольной строки.