이 샘플 코드가 제대로 작동하지 않는 이유는 무엇입니까?Perl 유니 코드 형식 문제
#/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 번 가져오고 싶습니다.
이 샘플 코드가 제대로 작동하지 않는 이유는 무엇입니까?Perl 유니 코드 형식 문제
#/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 번 가져오고 싶습니다.
당신이 URL을 디코딩하려는 경우, 내 생각으로, 당신은 uri_unescape
기능을 사용한다 URI::Escape
모듈에서.
또는 s{%([0-9A-F]{2})}{chr(hex($1))}egi
과 같은 것을 사용하십시오.
url/uri 처리를 위해 미리 빌드 모듈을 사용하는 것이 좋습니다. 수작업으로 만든 정규 표현식보다 오류 발생 가능성이 훨씬 적습니다. – Mat
첫 정규 표현식의 경우, 사용할 수 있습니다
$a = "aaa%29";
$a =~ s/%([0-9A-F]{2})/chr(hex($1))/gie;
print "a $a \n";
난 당신이 생각 sprintf
으로 무엇을하려고 아무 생각이 없습니다. 은 (중 use warnings;
과 코드에 경고를 켜거나 perl
에 옵션으로 -w
을 전달합니다. sprintf
호출이 유효하지 않습니다.)
'', '\', 'x', '2', '9', '' '는 한 문자로 구성된 문자열 리터럴의 Perl 코드입니다.
'\', 'x', '2', '9'는 다른 시퀀스이며 Perl 구문 분석기로 전달되지 않으며 훨씬 덜 실행됩니다. 또한 sprintf
은 특별히 "\"를 처리하지 않습니다. 모든 이스케이프는 "%"로 시작합니다.
그래서 동일한 출력을 얻지 못합니다.
코드가 제대로 작동하지만 분명히 이상한 것을 기대하고 있습니다. 어떤 출력 라인을 원하십니까? "aaa \ x29"또는 "aaa")? – gpvos
두 번째 싶습니다 – ninjaaa