Проблема форматирования Perl Unicode - PullRequest
0 голосов
/ 15 марта 2011

Почему этот пример кода не работает правильно?

#/usr/bin/perl

$a = "aaa%29";
$a =~ s/%/\\x/g;
print "a  $a \n";
$b = "aaa\x29";
print "b  $b \n";
$c = sprintf($a);
print "c  $c \n";

Я хочу получить три раза одну и ту же строку вывода.

Ответы [ 3 ]

5 голосов
/ 15 марта 2011

Если вы пытаетесь декодировать URL-адреса, как я полагаю, вам следует использовать функцию uri_unescape из модуля URI::Escape.

Или используйте что-то вроде s{%([0-9A-F]{2})}{chr(hex($1))}egi.

5 голосов
/ 15 марта 2011

Для первого регулярного выражения вы можете использовать:

$a = "aaa%29";
$a =~ s/%([0-9A-F]{2})/chr(hex($1))/gie;
print "a  $a \n";

Я понятия не имею, что вы пытаетесь сделать с sprintf.(Включите предупреждения в своем коде, набрав use warnings; или передав -w в качестве опции perl. Вызов sprintf недопустим.)

1 голос
/ 15 марта 2011

'"', '\', 'x', '2', '9', '"' - это код Perl для строкового литерала, который создает односимвольную строку.

'\', 'x', '2', '9' - это другая последовательность, и она никогда не передается парсеру Perl, а тем более выполняется.Кроме того, sprintf не относится к "\" специально.Все экранирования, которые он знает, начинаются с "%".

Вот почему вы не получаете тот же вывод.

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