我有一个字符串(例如'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
答案 0 :(得分:1)
只需分组:
my @array = ( $string =~ m/([0-9]+|[ATGCN]+)/g );
因为你必须为每场比赛只抓一组。
有了你的,你每次都会匹配2组,其中一组是空的。