0

我有一个字符串(例如'24G22'),我试图将其拆分为单独的数字和字符元素(即24、G、22)。为此,我编写了如下所示的正则表达式。

然而,由于一些奇怪的原因,我在我的数组中得到了很多未定义的元素,我期望它们的形式是:

@array = ('24','G', '22')

代替

@array = ('24', undef, undef, 'G', '22', undef)

我从输出中得到

有人可以帮我解释错误的原因以及如何纠正错误并获得我想要的输出吗?

脚本

#!/usr/bin/perl

use strict;
use warnings;

my $string = '24G22';
my @array = ( $string =~ m/([0-9]+)|([ATGCN]+)/g );
print join("\n", @array);

输出

$ ./test_debug.pl
Use of uninitialized value $array[1] in join or string at ./test_debug.pl line 8.
Use of uninitialized value $array[2] in join or string at ./test_debug.pl line 8.
Use of uninitialized value $array[5] in join or string at ./test_debug.pl line 8.
24


G
22
4

1 回答 1

1

只需分组:

my @array = ( $string =~ m/([0-9]+|[ATGCN]+)/g );

因为每场比赛你只需要抓住一组。

使用您的,您每次匹配 2 个组,其中一个是空的。

于 2013-10-30T08:01:13.663 回答