regex - Perl Regex 将字符串转换为十六进制警告未初始化的值或使用/x

标签 regex perl perl-critic

我在 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 的值无效。

最佳答案

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

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

此外,避免转换换行符可能毫无意义。如果是这样,您想使用 /s也。
s/(.)/sprintf("%x",ord($1))/sexg

关于regex - Perl Regex 将字符串转换为十六进制警告未初始化的值或使用/x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924966/

相关文章:

java - 正则表达式匹配或数组搜索

javascript - 正则表达式字符串以在 Javascript 中不起作用为结尾

perl - 如何在Perl中创建哈希哈希?

perl - 将 IPC::Open3 与 perlcritic 一起使用

批评 : eval "require $module";

java - 捕获组中的可选子字符串

Python:如何在使用正则表达式时跳过有多余字符的行?

perl - 在 Perl 中验证路径

regex - PCRE(递归)模式匹配包含正确括号子字符串的字符串。为什么这个会失败?

perl - 让 Perl 警告我缺少未使用的函数