4

我在 perl 中使用正则表达式将字符串转换为十六进制,但是,当我这样做时,我会收到来自 perl 评论家或 perl 的警告:

#$test is defined, i just put the regex code snippet here...
#this will trigger a warning from perl critic
#warning: use of regex expression without "/x" expression..
$text =~  s/(.)/sprintf("%x",ord($1))/eg;

#this will trigger a a warning at run time 
#warning: "uninitialized value $1 in regexp compilation"
$text =~   m{s/(.)/sprintf("%x",ord($1))/eg}x;

有没有办法编写上述代码而不会从 Perl 评论家那里得到警告或反馈?

我认为问题在于 ord 正在处理未定义的值,并且当您输入 /x 时,检查正则表达式会认为 $1 的值是无效的。

4

1 回答 1

8

这个批评者就是所谓的误报。这里没有必要或理由/x。如果你试图让每一个批评者保持沉默,你最终会得到奇怪的代码。也就是说,评论家在推荐

s/(.)/sprintf("%x",ord($1))/exg

此外,避免转换换行符可能没有意义。如果是这样,您也想使用/s

s/(.)/sprintf("%x",ord($1))/sexg
于 2012-10-17T00:30:41.473 回答