首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

perl中的 “字符串的eval”有关问题

2012-02-07 
perl中的 “字符串的eval”问题小骆驼书第四版(236页,第六章)提到:eval后以花括号包住程序代码的方式很安全,

perl中的 “字符串的eval”问题
小骆驼书第四版(236页,第六章)提到:eval后以花括号包住程序代码的方式很安全,但有一种“字符串的eval”则可能造成安全上的问题。
请问:所谓 “字符串的eval” 是什么意思?
或者提供相关文档让我去查看也行。
谢谢!

[解决办法]
这里说的是两种eval 的用途。
1) eval {}; # 这种情况一般多用于错误处理。就像Java的 try {} catch {}; 在perl里一般是 eval {}; if (@!) {...} 
2) 第二种用途是 eval后面是个字符串。例如: eval "system('rm 重要的文件或目录')" 这样就很危险。

[解决办法]
第二种用途是说在运行时执行在字符串里的代码。
《Intermediate Perl》第二章有详细的介绍。

下面这个是它一个简单的例子:

Perl code
foreach my $operator ( qw(+ - * /) ) {  my $result = eval "2 $operator 2";  print "2 $operator 2 is $result\n";}
[解决办法]
比如,eval一个删除自己所有文件的代码段

热点排行