Perl:将十进制更改为十六进制的正则表达式

Ale*_*exx 3 regex string perl function

我有一个文件,其中许多十进制数以类似的形式给出

Hello
Hey
'37888' =>'A'
'37890' =>'B'
'37642' =>'C'

Run Code Online (Sandbox Code Playgroud)

现在我已经试过了,

while (my $line = <$Log1>) {
    $line =~ s/'(\d+)'/(\hex(\d+))/g);    #Here I am getting error
    print $line;
    };
sub hex{
my $num = @_;
my $n= ("0x"."%x\n", $num);
return $n; 
};   
Run Code Online (Sandbox Code Playgroud)

我认为 (\hex(\d+)) 会起作用。有什么建议怎么做吗?

too*_*lic 5

您可以使用sprintf将十进制数格式化为十六进制并使用s/// withe来评估sprintf

use warnings;
use strict;

while (my $line = <DATA>) {
    $line =~ s/(\d+)/sprintf '0x%x', $1/eg;
    print $line;
}

__DATA__
Hello
Hey
'37888' =>'A'
'37890' =>'B'
'37642' =>'C'
Run Code Online (Sandbox Code Playgroud)

输出:

Hello
Hey
'0x9400' =>'A'
'0x9402' =>'B'
'0x930a' =>'C'
Run Code Online (Sandbox Code Playgroud)

此外,已经有一个内置的十六进制函数,这意味着您应该避免创建自己的名为hex.