我有一个文件,其中许多十进制数以如下形式给出
Hello
Hey
'37888' =>'A'
'37890' =>'B'
'37642' =>'C'
现在我试过了,
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;
};
我认为 (\hex(\d+)) 会起作用。有什么建议吗?
最佳答案
您可以使用 sprintf将十进制数格式化为十六进制并使用 s///用 e
计算 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'
输出:
Hello
Hey
'0x9400' =>'A'
'0x9402' =>'B'
'0x930a' =>'C'
此外,已经有一个内置的 hex函数,这意味着您应该避免创建自己的名为 hex
的函数。
关于regex - 珀尔 : Regular Expression with changing decimal to hexadecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64032327/