爲什麼這個示例代碼不能正確工作?Perl unicode格式問題
#/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";
我想要得到相同的輸出線的三倍。
爲什麼這個示例代碼不能正確工作?Perl unicode格式問題
#/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";
我想要得到相同的輸出線的三倍。
如果你試圖解碼網址,因爲我想,你應該使用uri_unescape
功能來自URI::Escape
模塊。
或者使用類似s{%([0-9A-F]{2})}{chr(hex($1))}egi
的東西。
有關使用預構建模塊進行url/uri處理的好處。比手工構建的正則表達式要少得多。 – Mat 2011-03-15 10:07:17
對於第一個正則表達式,你可以使用:
$a = "aaa%29";
$a =~ s/%([0-9A-F]{2})/chr(hex($1))/gie;
print "a $a \n";
我不知道你正在嘗試與sprintf
做雖然。 (打開警告在你的代碼或者use warnings;
或通過-w
作爲一個選項perl
該sprintf
調用無效。)
'''''','x','2','9','''是創建單字符字符串的字符串文字的Perl代碼。 '','x','2','9'是一個不同的序列,並且它永遠不會傳遞給Perl解析器,更不會被執行。此外,sprintf
不專門處理「\」。它所知道的所有逃脫都以「%」開頭。
這就是爲什麼你沒有得到相同的輸出。
該代碼正常工作,但顯然你期待着一些奇怪的事情。你想要哪個輸出線? 「aaa \ x29」或「aaa)」? – gpvos 2011-03-15 09:31:59
我想第二個 – ninjaaa 2011-03-15 09:38:58