繁体   English   中英

如何让perl解释代表地址的字符串变量

[英]How can I let perl interpret a string variable that represents an address

我想使用这样的perl脚本将输入提供给C程序./cprogram $(perl -e 'print "\\xab\\xcd\\xef";')

但是,必须从文件中读取字符串。 所以我得到这样的东西: ./cprogram $(perl -e 'open FILE, "<myfile.txt"; $file_contents = do { local $/; <FILE> }; print $file_contents' 。但是,现在perl解释了字符串作为字符串"\\xab\\xcd\\xef" ,我希望它像第一个示例一样将其解释为字节序列。

如何做到这一点? 它必须在没有File :: Slurp的服务器上运行。

在第一种情况下,您将三个字节AB CD EF (由字符串文字"\\xAB\\xCD\\xEF" )传递给print

在第二种情况下,您必须传递除这三个字节以外的其他内容以进行print 我怀疑您正在传递十二个字符串\\xAB\\xCD\\xEF进行print

因此,您的问题变成:如何将十二个字符的字符串\\xAB\\xCD\\xEF转换为三个字节的AB CD EF 好吧,您需要某种解析器,例如

s/\\x([0-9a-fA-F][0-9a-fA-F])|\\([^x])|([^\\]+)/
   $1 ? chr(hex($1)) : $2 ? $2 : $3
/eg

这是在工作:

$ perl -e'print "\\xAB\\xCD\\xEF";' >file

$ echo -n "$( perl -0777pe'
     s{\\x([0-9a-fA-F][0-9a-fA-F])|\\([^x])|([^\\]+)}{
        $1 ? chr(hex($1)) : $2 // $3
     }eg;
  ' file )" | od -t x1
0000000 ab cd ef
0000003

使用bash技巧:

perl -e "$(echo "print \"$(cat input)"\")"

您的示例变为:

./cprogram "$(perl -e "$(echo "print \"$(cat myfile.txt)"\")")"

Perl的评估太邪恶了吗? 如果不是, print eval("\\"$file_contents\\"");结尾print eval("\\"$file_contents\\"");

还是可以使用Perl预先准备文件? EG print FILE "\\xAB\\xCD\\xED"; 然后使用现有代码读取结果文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM