09/08/06。 cathayan.org版权所有,保留一切权利。转载请保留此说明。谢绝商业转载。
Eval,也就是evaluation,evaluates a string as though it were an expression,这个词是 估价,评价,求值的意思,这里只能取“求值”这个意思了。以前只在bash shell脚本里见过,也不怎么明白。今天碰到一个大表格,里面有一项要本来是填数字,高人们有的给填成了10*4, 23*8这种算式,这种东西数据库进不去,还是得算,10000多条,想想都烦。
还是得Perl。本来是想把这个式子按*拆开,得到两个数字再做运算,应该也行,不小心翻书就翻到字串处理部分的最后一页,正是eval()这个函数,真是巧了,一读就发现它可以求值,以前翻到这页也不止一次,居然就没看过。
my $t = “33*21+23484/1291”;
my $tt = eval($t);
print $tt;
管它几万行,一个while就加两行eval和print就全算出来了,真是不错啊。
看了
Wikipedia的解释,原来许多语言都有这个功能,包括Javascript,Python,Lisp和PHP等。Bash也有,我记得看到的应该就是 eval ‘dircolors’ 这一句,就是运行dircolor,打印出LS_COLORS的值用于bash里面的export什么的。
在perl里面,除了可以求值并赋给其他变量,它还会把运行结果(成功与否)交给特殊变量,$@,如果运行一切正常,就是未定义,如果有问题,里面就是错误信息,这样就可以用它对一个式子在运行前进行检查,免得出除0一类的错误。当然,由于它可以在代码里面再运行代码,危险性也是显而易见的。
09/08/06 00:33:00,由
cathayan发表。目录:
电脑
5条评论
tcl/tk中也有eval,有时候eval能完成很奇妙的功能。
上面那个logo很别致啊
globetrekker 于 09/08/06 08:51:48 发表.
I am watching and will delete all spam.