使用正则表达式解释perl中的权限

fug*_*ugu -1 regex math perl eval

我试图读取两个由a分隔的数字:并进行比较.

下面是一些说明我的问题的代码:

use strict;
use warnings;

my @nums = qw(1.23:2.13 0.1:2.11 1.17772e+06:1.32 2:10.2);

for my $number (@nums){
    print "actual numbers $number\n";
    my ($c, $e) = ($1, $2) if $number =~ /(\d+\.\d+|\d+):(\d+\.\d+|\d+)/;
    print  "regex matches: $c:$e\n";
}
Run Code Online (Sandbox Code Playgroud)

哪个输出:

actual numbers 1.23:2.13
regex matches: 1.23:2.13
actual numbers 0.1:2.11
regex matches: 0.1:2.11
actual numbers 1.17772e+06:1.32
regex matches: 06:1.32 # not capturing 1.17772e+06
actual numbers 2:10.2
regex matches: 2:10.2
Run Code Online (Sandbox Code Playgroud)

我的问题是:我怎样才能a)捕获1.17772e+06并b)将其评估为数字?

ike*_*ami 5

perldata:

/^(?:[+-]?)(?=\d|\.\d)\d*(?:\.\d*)?(?:[Ee](?:[+-]?\d+))?$/
Run Code Online (Sandbox Code Playgroud)

要么,

use Regexp::Common;
/$RE{num}{real}/
Run Code Online (Sandbox Code Playgroud)

(这些假设您需要Perl对数字的定义.)