在Perl中对hexstring执行算术运算

我正在尝试编写一个perl单行程序,它需要两个hexstring(string看起来像hex,但没有前导0x),并执行两个hexstring的算术expression式。

例如。 假设我正在读取/ proc / PID / maps中的数据。 第一列包含hex的内存地址(不带前导0x)

bff45000-bff66000 

是地址的一个例子。

我正在使用的perl单行版本是:

 perl -le 'print" "x5,"Hex\t\tDecimal\n","-"x15," "x5,"-"x15;foreach $a(@ARGV){$b=eval($a);printf"0x%-10x %17d\n",$b,$b}' 

我遇到的问题是perl会抛出这样的错误

 Bareword found where operator expected at (eval 1) line 1, near... 

这是因为Perl可以以“0x … + 0x …”的forms对hexstring执行算术运算,而不是“…. + …..”

请有人指点我正确的方向,以便我可以如何解决我的问题吗?

使用perl的字首,给数字0x前缀,然后使用eval

 echo "bff45000-bff66000" | perl -lne 's/([[:xdigit:]]+)/0x$1/g; print eval' 

输出:

 -135168 

你也想用十六进制输出吗?

 echo deadbeef-c00cc00c | perl -lne 's/[[:xdigit:]]+/hex($&)/g;printf "%x",eval'