我怎样才能让perl解释一个表示地址的字符串变量



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

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

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

在第

一种情况下,您将三个字节AB CD EF(由字符串文字"xABxCDxEF"生成)传递给print

在第二种情况下,您必须将这三个字节以外的内容传递给 print .我怀疑您正在将十二个字符的字符串xABxCDxEF传递给print.

所以你的问题变成了:如何将十二个字符的字符串xABxCDxEF转换为三个字节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

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

或者你可以使用 Perl 提前准备文件吗?EG print FILE "xABxCDxED";然后使用现有代码读取生成的文件。

使用bash 技巧:

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

对于您的示例,它变为:

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

相关内容

  • 没有找到相关文章