4

perl で正規表現を使用して文字列を 16 進数に変換していますが、これを行うと、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 に答える