计算从Perl文件中读取的字符串

wqsoz72f  于 2022-12-13  发布在  Perl
关注(0)|答案(1)|浏览(135)

虚构示例(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中已经存在一些东西,这些字符串表达式不需要解析和求值。

o2g1uqev

o2g1uqev1#

“字符串”eval有点具体:
eval的所有形式都用于执行一个小Perl程序。
...
在字符串eval中,首先解析表达式的值(它本身在标量上下文中确定),如果没有错误,则作为当前Perl程序的词法上下文中的块执行。
因此,这将计算 code,并且对于包含字符串文字的待计算变量,我们有一个“bareword”(“Unquoted string”),这通常是不好的。在您的示例中,$x中的/会引起额外的麻烦。
如果要计算的变量的内容是字符串文字(而不是代码),则需要用引号引起来

my $y = eval q(") . $x . q(");  # double-quote so that it interpolates

我使用的是运算符形式的单引号q(),它下面的引号是双引号,因为$x本身似乎包含需要求值(插值)的变量。
请记住,从外部源运行代码可能会带来严重的安全问题。

相关问题