2014-11-24 63 views
0

这里是我的Perl代码:PERL Unicode转义字符串命令行参数传递错误的输出

use Unicode::Escape; 

my $string = shift; 
print Unicode::Escape::escape($string) . "\n"; 

当我从终端执行该脚本的Unicode是无法逃避

perl的unicode_escape.pl“https://docs.google.com/uc?id \ u003d0ByPZe438mUkZVkNfTHZLejFLcnc \ u0026export \ u003ddownload \ u0026revid \ u003d0ByPZe438mUkZbUIxRkYvM2dwbVduRUxSVXNERm0zZFFiU2c0PQ”

输出:

https://docs.google.com/uc?id\u003d0ByPZe438mUkZVkNfTHZLejFLcnc\u0026export\u003ddownload\u0026revid\u003d0ByPZe438mUkZbUIxRkYvM2dwbVduRUxSVXNERm0zZFFiU2c0PQ 

但当串是码

use Unicode::Escape; 

my $string = "https://docs.google.com/uc?id\u003d0ByPZe438mUkZVkNfTHZLejFLcnc\u0026export\u003ddownload\u0026revid\u003d0ByPZe438mUkZbUIxRkYvM2dwbVduRUxSVXNERm0zZFFiU2c0PQ"; 

print Unicode::Escape::escape($string) . "\n"; 

里面,当我执行脚本

perl unicode_escape.pl 

它产生正确输出

输出

https://docs.google.com/uc?id003d0ByPZe438mUkZVkNfTHZLejFLcnc0026export003ddownload0026revid003d0ByPZe438mUkZbUIxRkYvM2dwbVduRUxSVXNERm0zZFFiU2c0PQ 

我不明白perl如何决定这么做?请帮助

UPDATE:

嗨,池上 我试过,但仍不能在这里工作是我的代码:

use Unicode::Escape; 

my $string = shift; 

$string =~ s/\\/\\\\/g; 

print Unicode::Escape::escape($string) . "\n"; 

我试图产生输出同为第二代码片段。

我想要做的是当我运行这个命令就像在第一个代码片段。

perl unicode_escape.pl "https://docs.google.com/uc?id\u003d0ByPZe438mUkZVkNfTHZLejFLcnc\u0026export\u003ddownload\u0026revid\u003d0ByPZe438mUkZbUIxRkYvM2dwbVduRUxSVXNERm0zZFFiU2c0PQ" 

应该给予同样作为第二代码段

输出

https://docs.google.com/uc?id003d0ByPZe438mUkZVkNfTHZLejFLcnc0026export003ddownload0026revid003d0ByPZe438mUkZbUIxRkYvM2dwbVduRUxSVXNERm0zZFFiU2c0PQ 
+0

在第一个例子中,'$ string'包含你的shell作为第一个参数传入程序的内容。在第二个例子中,'$ string'包含'perldoc perlop'中定义的双引号插值的结果。打印字符串的“未转义”版本可能会提供信息。最后,我看不到需要转义的字符串中的非ASCII字符。 – tjd 2014-11-24 20:35:25

回答

0

在第一个片段,您也将下列到$string输出:

https://docs.google.com/...download\u0026revid... 

在第二个片段中,你屁股IGN以下至$string

https://docs.google.com/...download0026revid... 

在一个Perl双引号字符串字面,\u导致下一个字符要大写。你需要转义\

my $string = "https://docs.google.com/...download\\u0026revid..."; 
相关问题