0

我在使用 perl splice() 方法时遇到问题。下面您将看到我首先确定了我正在寻找的两个字符串的索引,然后使用索引执行 splice() 以获得所需的数组。

我的代码如下:

my @a = qw(foo bar bazz elements in between hello bazz johnny bl aba);
my $z = 0;

for (my $i = 0; $i < @a; $i++)
{
    next unless $a[$i] =~ /bazz/;

    if( $z eq 0 )
    {
        $z++;
        $first = $i;
    }
    else
    {
        $second = $i;
    }               
    my @b = splice(@a,$first,$second);
    print Dumper(@b);
}

打印结果如下:

$VAR1 = 'bazz';
$VAR2 = 'elements';
$VAR3 = 'in';
$VAR4 = 'between';
$VAR5 = 'hello';
$VAR6 = 'bazz';
$VAR7 = 'johnny';

我的印象是 splice 将块放在给定的限制之间,当然包括在内。我不明白为什么元素“约翰尼”会在那里。列表不应该停在第二个“bazz”吗?

感谢您对此问题的任何指示。

4

2 回答 2

8

第二个参数是切片的长度,而不是切片末尾的索引。

于 2013-06-12T15:50:26.507 回答
2

splice将参数作为

splice @ARRAY, $OFFSET, $LENGTH, @REPLACE_LIST;

它从索引开始删除$LENGTH元素并用给定的列表替换它们(或在(隐式)给出空列表时从数组中删除它们)。@ARRAY$OFFSET

看来您想要一个数组切片

my @b = @a[$first .. $second];
print Dumper \@b;
于 2013-06-12T15:54:35.700 回答