如果一个字符串表示如下 $ str =“5 + 2-1”; 我想从该字符串中获取计算结果。 如何转换为标量来计算? 感谢。
答案 0 :(得分:12)
最简单的方法:
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 );
答案 1 :(得分:8)
如果您确定该字符串不包含任何恶意代码,您可以使用eval将其内容视为perl代码。
#!/usr/bin/perl
use strict;
use warnings;
my $string = "5+2-1";
print eval($string);
#print 6