2012-06-22 81 views
2

有人可以解释为什么这不工作,因为我期望它?Perl包,解压缩和STDIN

zen:~ emx$ echo ABC | perl -nle "print unpack 'H*'" 
414243 
zen:~ emx$ echo 414243 | perl -nle "print pack 'H*'" 

zen:~ emx$ 

不知怎的,我期待第二个命令打印ABC

回答

5

unpack()默认使用$_,如果你不提供第二个参数提供它; pack() on the other hand, does not

+0

但是'echo 414243 | perl -nle“print pack'H *',$ _”'也不会产生任何结果。 – emx

+0

这将是因为你的shell在'perl'有任何机会看到它之前将'$ _'变量扩展为空。你想'回声414243 | perl -nle“print pack'H *',\ $ _”' – lanzz

+0

这个初学者的错误!感谢您指出。 '回声414243 | perl-nle'打印包'H *“,$ _''确实很棒。 – emx