仅当它是perl中的赋值语句时才使用Eval字符串字符串

时间:2014-07-05 10:24:00

标签: perl

我有一个带有哈希表的字符串,我想使用Perl eval将其分配给引用变量。考虑:

use warnings;
use strict;
use Data::Dump qw(dump);

my $h;
my $str=q/$h={a=>'a',b=>'b'}/;
eval($str);
if ($@) {
   print "An error occured processing the string\n";
   die $@;
}
dump($h);

问题是该字符串实际上是由用户提供的(从文件中读取),我想防止恶意代码在eval中执行。是否可以检查字符串是否仅表示变量赋值(不是像unlink my_important_file;这样的代码?)

2 个答案:

答案 0 :(得分:1)

查看模块Quote::Ref

答案 1 :(得分:0)

如果您确实需要评估用户输入,请使用Safe。用法示例here