Regex 如何使用perl从数组中提取子数组

Regex 如何使用perl从数组中提取子数组,regex,perl,Regex,Perl,假设我有这个数组。(Perl) 如何提取子阵列?另外,如何确定每个子阵列的索引? 提前谢谢 首先,在Perl中,列表总是扁平化的。多维列表不存在。这意味着 ( 1, 2, 3, (4, 5) ) 与 ( 1, 2, 3, 4, 5 ) 或 它们都被压扁了 如何使用子数组的大小提取子数组,或确定每个元素末尾的索引 你说你知道每个元素的大小。在这种情况下,您有几个选择 # index 0 1 2 3 4 5 6 7 8 9 10 11 1

假设我有这个数组。(Perl)

如何提取子阵列?另外,如何确定每个子阵列的索引? 提前谢谢

首先,在Perl中,列表总是扁平化的。多维列表不存在。这意味着

( 1, 2, 3, (4, 5) )

( 1, 2, 3, 4, 5 )

它们都被压扁了

如何使用子数组的大小提取子数组,或确定每个元素末尾的索引

你说你知道每个元素的大小。在这种情况下,您有几个选择

# index               0 1 2      3 4 5 6 7 8      9      10 11 12
my @long_array = ( qw(a b c), qw(a 2 3 4 5 j), qw(l), qw(t  x  51));

my @abc    = @long_array[0 .. 2];
my @a2345j = @long_array[3 .. 8];
my $l      = $long_array[9];
my @tx51   = @long_array[10, 11, 12];
这主要使用数组切片,这就是为什么
@long_array[0..2]
的sigil是
@
,而不是
$
,因为表达式返回的是列表而不是标量

另一种方法是使用,但这会改变初始数组


无论哪种情况,您都必须知道每个子列表的开始和长度。因为没有子列表,所以这是获取每段数据的唯一方法。如果你不知道起始索引和长度,那你就倒霉了。

括号只会影响优先级。Perl将把您认为是数组的数组展平为单个数组。为了模拟一个或多个数组,您需要实际创建一个数组引用([]、[]、[]),如下所示

use strict;
use warnings;
my @arr= (['a','b','c'],['a',2,3,4,5,'j'],['l'],['t','x',51]);

print $arr[0]->[1]; #prints b
print $arr[1]->[2]; #prints 3

#prints all elements
foreach my $arrRef(@arr) {
    foreach my $element(@$arrRef) {
        print "$element\n";
    }
}
有些方法

@var_ref_array = (
            [ "a", "b",    "c" ],
            [ "d", "e",    "f" ],
            [ "g"] );

for my $i ( 0 .. $#{var_ref_array})
{
    for my $j ( 0 .. $#{var_ref_array->[$i]})
    {
        print "$var_ref_array[$i][$j]";
    }    
}

printf "\n";

for(my $i=0; $i<$#{var_ref_array}+1; $i++){ 
    for(my $j=0; $j<$#{var_ref_array->[$i]}+1; $j++){
        print "$var_ref_array[$i][$j]";
    }
}

printf "\n";

for(my $i=0; $i<scalar @var_ref_array; $i++){ 
    for(my $j=0; $j<scalar @{$var_ref_array[$i]}; $j++){
        print "$var_ref_array[$i][$j]";
    }
}

printf "\n";

for(my $i=0; $i<scalar @var_ref_array; $i++){ 
    for(my $j=0; $j<scalar @{var_ref_array->[$i]}; $j++){
        print "$var_ref_array[$i][$j]";
    }
}

printf "\n";

for my $i ( 0 .. @var_ref_array)
{
    for my $j ( 0 .. @{$var_ref_array[$i]})
    {
        print "$var_ref_array[$i][$j]";
    }    
}

printf "\n";

for my $i ( 0 .. @var_ref_array)
{
    for my $j ( 0 .. @{var_ref_array->[$i]})
    {
        print "$var_ref_array[$i][$j]";
    }    
}

printf "\n";

foreach my $array_(@var_ref_array){
    foreach my $element(@$array_){
        print "$element";
    }
}
@var\u ref\u数组=(
[“a”、“b”、“c”],
[“d”、“e”、“f”],
[“g”]);
对于我的$i(0..$#{var_ref_array})
{
对于我的$j(0..$#{var_ref_array->[$i]})
{
打印“$var_ref_数组[$i][$j]”;
}    
}
printf“\n”;

for(my$i=0;$i您编写的数组与(a、b、c、a、2、3、4、5、j、l、t、x、51)相同。这不是构建多维数组的方式,您必须使用引用。此外,您的代码片段会出错,因此我猜您没有使用
strict
warnings
您应该始终使用它们。我要感谢大家利用您的时间来帮助我@arr=(['a','b','c'),['a',2,3,4,5,'j'],['l'],['t','x',51])#为($i=0;$i)打印所有元素,感谢您花时间帮助我,我得到了我想要的,我将发布解决方案
use strict;
use warnings;
my @arr= (['a','b','c'],['a',2,3,4,5,'j'],['l'],['t','x',51]);

print $arr[0]->[1]; #prints b
print $arr[1]->[2]; #prints 3

#prints all elements
foreach my $arrRef(@arr) {
    foreach my $element(@$arrRef) {
        print "$element\n";
    }
}
@var_ref_array = (
            [ "a", "b",    "c" ],
            [ "d", "e",    "f" ],
            [ "g"] );

for my $i ( 0 .. $#{var_ref_array})
{
    for my $j ( 0 .. $#{var_ref_array->[$i]})
    {
        print "$var_ref_array[$i][$j]";
    }    
}

printf "\n";

for(my $i=0; $i<$#{var_ref_array}+1; $i++){ 
    for(my $j=0; $j<$#{var_ref_array->[$i]}+1; $j++){
        print "$var_ref_array[$i][$j]";
    }
}

printf "\n";

for(my $i=0; $i<scalar @var_ref_array; $i++){ 
    for(my $j=0; $j<scalar @{$var_ref_array[$i]}; $j++){
        print "$var_ref_array[$i][$j]";
    }
}

printf "\n";

for(my $i=0; $i<scalar @var_ref_array; $i++){ 
    for(my $j=0; $j<scalar @{var_ref_array->[$i]}; $j++){
        print "$var_ref_array[$i][$j]";
    }
}

printf "\n";

for my $i ( 0 .. @var_ref_array)
{
    for my $j ( 0 .. @{$var_ref_array[$i]})
    {
        print "$var_ref_array[$i][$j]";
    }    
}

printf "\n";

for my $i ( 0 .. @var_ref_array)
{
    for my $j ( 0 .. @{var_ref_array->[$i]})
    {
        print "$var_ref_array[$i][$j]";
    }    
}

printf "\n";

foreach my $array_(@var_ref_array){
    foreach my $element(@$array_){
        print "$element";
    }
}