[英]Evaluate a string read from a file in perl
組成的例子(perl):
my $x = read_input_from_file();
# $x now contains string $ENV{SOMETHING}/dir/$ENV{SOMETHING_ELSE}
my $y = eval($x); # doesnt work
如何在腳本中獲取 $x 中包含的字符串的值?
到目前為止,我已經嘗試使用不生成任何 output 的eval
。我希望 perl 中已經存在一些東西,並且不需要解析和評估這些字符串表達式。
“字符串”評估有點具體:
eval
在其所有 forms 中用於執行一個小的 Perl 程序。
...
在字符串 eval 中,首先解析表達式的值(它本身在標量上下文中確定),如果沒有錯誤,則在當前 Perl 程序的詞法上下文中作為一個塊執行。
所以這會評估代碼,並且對於包含字符串文字的要評估的變量,我們有一個“裸詞”(“未加引號的字符串”),這通常是不好的。 在您的情況下, $x
中的那些/
會造成額外的麻煩。
如果要評估的變量的內容是字符串文字(不是代碼),則需要引用它
my $y = eval q(") . $x . q("); # double-quote so that it interpolates
我使用單引號的運算符形式q()
。 它下面引用的是雙引號,因為$x
本身似乎包含需要評估(插值)的變量。
請記住,從外部源運行代碼可能是一個嚴重的安全問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.