虚构示例(perl):
my $x = read_input_from_file(); # $x now contains string $ENV{SOMETHING}/dir/$ENV{SOMETHING_ELSE} my $y = eval($x); # doesnt work
如何在脚本中获取包含在$x中的字符串的值?到目前为止,我已经尝试使用eval,它不会生成任何输出。我希望Perl中已经存在一些东西,这些字符串表达式不需要解析和求值。
eval
o2g1uqev1#
“字符串”eval有点具体:eval的所有形式都用于执行一个小Perl程序。...在字符串eval中,首先解析表达式的值(它本身在标量上下文中确定),如果没有错误,则作为当前Perl程序的词法上下文中的块执行。因此,这将计算 code,并且对于包含字符串文字的待计算变量,我们有一个“bareword”(“Unquoted string”),这通常是不好的。在您的示例中,$x中的/会引起额外的麻烦。如果要计算的变量的内容是字符串文字(而不是代码),则需要用引号引起来
$x
/
my $y = eval q(") . $x . q("); # double-quote so that it interpolates
我使用的是运算符形式的单引号q(),它下面的引号是双引号,因为$x本身似乎包含需要求值(插值)的变量。请记住,从外部源运行代码可能会带来严重的安全问题。
q()
1条答案
按热度按时间o2g1uqev1#
“字符串”eval有点具体:
eval
的所有形式都用于执行一个小Perl程序。...
在字符串eval中,首先解析表达式的值(它本身在标量上下文中确定),如果没有错误,则作为当前Perl程序的词法上下文中的块执行。
因此,这将计算 code,并且对于包含字符串文字的待计算变量,我们有一个“bareword”(“Unquoted string”),这通常是不好的。在您的示例中,
$x
中的/
会引起额外的麻烦。如果要计算的变量的内容是字符串文字(而不是代码),则需要用引号引起来
我使用的是运算符形式的单引号
q()
,它下面的引号是双引号,因为$x
本身似乎包含需要求值(插值)的变量。请记住,从外部源运行代码可能会带来严重的安全问题。