4

如果一个字符串表示如下 $str = "5+2-1"; 我想从那个字符串中得到计算结果。如何转换为标量来计算它?谢谢。

4

2 回答 2

13

最简单的方法是:

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 );
于 2013-09-24T07:49:03.147 回答
9

如果您确定字符串不包含任何恶意代码,您可以使用 eval 将其内容视为 perl 代码。

#!/usr/bin/perl
use strict;
use warnings;

my $string = "5+2-1";

print eval($string);
#print 6    
于 2013-09-24T07:25:43.077 回答