Perl -e字段替换

时间:2013-09-30 23:36:49

标签: perl

我使用perl -e将十六进制数字(523cc261)转换为有意义的日期:

perl -e 'my $t=localtime 0x523cc261; print $t . "\n"' 
Fri Sep 20 21:47:13 2013

但是我无法编写脚本,因为上面的代码需要在prompt上提供的值。我尝试用523cc261代替变量,但它不起作用:

b=523cc261
perl -e 'my $t=localtime 0x`echo b`; print $t . "\n"`
Backticks found where operator expected at -e line 1, near "0x`echo b`"
        (Missing operator before `echo b`?)
syntax error at -e line 1, near "0x`echo b`"

我的问题是如何通过脚本中的参数提供十进制值(523cc261)。

2 个答案:

答案 0 :(得分:3)

最简单的方法是将时间作为参数传递给Perl脚本。我已经将脚本改写为更简洁一点:

% b=523cc261
% perl -E 'say scalar localtime hex $ARGV[0]' $b
Fri Sep 20 14:47:13 2013

答案 1 :(得分:1)

您可以使用ENV HASH:

$ b=523cc261 perl -le 'my $t = scalar localtime hex $ENV{"b"}; print $t;'

另一个解决方案(有点混淆,$b是一个shell变量):

$ b=523cc261 perl -le 'my $t = scalar localtime hex "'$b'"; print $t;'