簡體   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