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+)) 会起作用。有什么建议怎么做吗?
您可以使用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.