【发布时间】:2013-09-29 07:06:27
【问题描述】:
如果一个字符串表示如下 $str = "5+2-1"; 我想从那个字符串中得到计算结果。 如何转换为标量来计算它? 谢谢。
【问题讨论】:
如果一个字符串表示如下 $str = "5+2-1"; 我想从那个字符串中得到计算结果。 如何转换为标量来计算它? 谢谢。
【问题讨论】:
最简单的方法:
print eval('5+2-1');
但这并不安全:
print eval('print "You are hacked"');
你需要在eval之前检查字符串。
您也可以使用Math::Expression 模块或 cpan 中的许多其他模块:
#!/usr/bin/perl
use strict;
use warnings;
use Math::Expression;
my $env = Math::Expression->new;
my $res = $env->Parse( '5+2-1' );
# my $res = $env->Parse( 'print you are hacked' ); # no math expression here
print $env->Eval( $res );
【讨论】:
如果您确定字符串不包含任何恶意代码,您可以使用 eval 将其内容视为 perl 代码。
#!/usr/bin/perl
use strict;
use warnings;
my $string = "5+2-1";
print eval($string);
#print 6
【讨论】: