我正在尝试编写一个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'