Perl中的Sprintf不能正确显示十六进制字符

Sib*_*der 2 perl printf

我有这样的代码.

     $entry = &function();   //returns a number between 0 to 20
     $var = sprintf("%#.4x", $entry);
     if($var=~ /$hex/)
     {
         //block of statements
      }
Run Code Online (Sandbox Code Playgroud)

$ hex将在0x0000 ..... 0x0014内.现在,当function从1到20返回时,$ var匹配$ hex.(如0x0001 .... 0x0014)

但是当$ entry为0时,$ var变为0000.但我希望它是0x0000.目前,我正在检查是否0000,我正在通过if循环更改它.如果sprintf本身有可能,请告诉我.

Håk*_*and 7

根据sprintf的文档:

flags
#前缀非零十六进制,带"0x"或"0X"

请注意,它说non-zero,因此只有非零值将作为前缀0x.

一个简单的解决方法是手动添加前缀:

sprintf "0x%04x", $entry;
Run Code Online (Sandbox Code Playgroud)