【发布时间】:2010-10-14 07:21:03
【问题描述】:
我想评估一个环境变量并将结果设置为一个变量:
$x=eval($ENV{EDITOR});
print $x;
输出:
/bin/vi
工作正常。
如果我将环境变量 QUOTE 设置为 \' 并尝试相同的操作:
$x=eval($ENV{QUOTE});
print $x;
输出:
(什么都没有)
$@ set to: "Can't find a string terminator anywhere before ..."
我不希望简单地设置$x=$ENV{QUOTE};,因为 eval 也用于调用脚本并返回其最后一个值(非常方便),所以我想坚持使用 eval();请注意,以这种方式评估的所有环境变量都是由我在不同的位置设置的,因此我不担心恶意访问以这种方式评估的环境变量。
建议?
【问题讨论】:
-
您真正想要完成什么?问这个问题,也许我们可以给你更好的帮助。 :)
-
不要盲目评估 %ENV 用户输入;这是非常危险的。 eval 调用 perl 解释器并且 %ENV 已经是有效的 perl 标量。它充其量不会做任何事情,而最坏的情况可能会造成巨大的伤害。任何人都可以将代码放入 EDITOR 以破坏您的系统或破坏敏感数据,无论您是否属于。
-
老实说,这是我想问的问题。我控制这个过程使用的环境变量的值(因此我不会盲目地评估环境,因为它之前是由“我”设置的)。我需要评估许多不同的东西,这只是一个。我相信我有一个充分的答案。谢谢
-
你为什么要调用 eval() 呢?你认为 eval() 有什么作用?
标签: perl environment-variables