Perl 如何使用数组切片同时访问数组的多个元素?

Perl 如何使用数组切片同时访问数组的多个元素?,perl,Perl,我正在尝试修改此脚本: #!/usr/bin/perl use strict; use warnings; use diagnostics; use Math::Vector::Real; use constant DEG_PER_RAD => 45 / atan2(1, 1); my ( $source, $out ) = qw/ OUT4 OUTABA12 /; open my $in_fh, '<', $source or die qq{Unable to open "$

我正在尝试修改此脚本:

#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use Math::Vector::Real;
use constant DEG_PER_RAD => 45 / atan2(1, 1);

my ( $source, $out ) = qw/ OUT4 OUTABA12 /;

open my $in_fh,  '<', $source or die qq{Unable to open "$source" for input: $!\n};
open my $out_fh, '>', $out    or die qq{Unable to open "$out" for output: $!\n};


my @data;
push @data, V(split) while <$in_fh>;
my @aoa;

for my $i ( 0 .. $#data ) {
    for my $j ( 0 .. $#data ) {
        my $val1 = $data[$i];
        my $val2 = $data[$j];

        if ($val1 != $val2) {

            my $math = sqrt(($val1->[0] - $val2->[0])**2 +
                ($val1->[1] - $val2->[1])**2 +
                ($val1->[2] - $val2->[2])**2);

                if ($math < 2.2) {
                    push @aoa, "@$val1 @$val2";
                    }
        }
    }
}

for my $k ( 0 .. $#aoa ) {
    for my $m ( 0 .. $#aoa ) {

        my $aoadata1 = $aoa[$k];
        my $aoadata2 = $aoa[$m];

        my $vect1 = $aoadata1[0..2];
        my $vect2 = $aoadata2[0..2];

        print "$vect1 $vect2\n";    

    }
}
#/usr/bin/perl
严格使用;
使用警告;
使用诊断;
使用Math::Vector::Real;
使用恒定度每弧度=>45/atan2(1,1);
我的($source,$out)=qw/OUT4 OUTABA12/;
打开我的$in_fh、、$out或死亡qq{无法打开输出的“$out:$!\n};
我的@数据;
按@数据,V(拆分)同时进行;
我的@aoa;
对于我的$i(0..$#数据){
对于我的$j(0..$#数据){
my$val1=$data[$i];
my$val2=$data[$j];
如果($val1!=$val2){
my$math=sqrt(($val1->[0]-$val2->[0])**2+
($val1->[1]-$val2->[1])**2+
($val1->[2]-$val2->[2])**2);
如果($math<2.2){
按@aoa,“@$val1@$val2”;
}
}
}
}
对于我的$k(0..$#aoa){
对于我的$m(0..$#aoa){
my$aoadata1=$aoa[$k];
my$aoadata2=$aoa[$m];
my$vect1=$aoadata1[0..2];
my$vect2=$aoadata2[0..2];
打印“$vect1$vect2\n”;
}
}

在脚本的末尾,我希望能够使用字段0-2中的变量$aoadata1和$aoadata2进行操作。然而,我无法让他们停止抛出关于引用不正确的东西的错误(我认为)。有人能告诉我为什么会发生这种情况/如何解决它吗


谢谢

如果要在一个数组中使用多个下标,必须更改符号:

@array[ 0 .. 2 ];
@{ $arra_ref }[ 0 .. 2 ];
不过,将结果指定给标量是没有意义的。使用匿名数组:

my $aoadata1 = $aoa[$k];
my $vect1 = [ @{ $aoadata1 }[ 0 .. 2 ] ];
或者,如果没有临时变量:

my $vect1 = [ @{ $aoa[$k] }[ 0 .. 2 ] ];
它可能仍然不起作用,正如我注意到的那样

push @aoa, "@$val1 @$val2";
你是说

push @aoa, [ @$val1, @$val2 ];

或者类似的东西?

如果要在一个数组中使用多个下标,必须更改符号:

@array[ 0 .. 2 ];
@{ $arra_ref }[ 0 .. 2 ];
不过,将结果指定给标量是没有意义的。使用匿名数组:

my $aoadata1 = $aoa[$k];
my $vect1 = [ @{ $aoadata1 }[ 0 .. 2 ] ];
或者,如果没有临时变量:

my $vect1 = [ @{ $aoa[$k] }[ 0 .. 2 ] ];
它可能仍然不起作用,正如我注意到的那样

push @aoa, "@$val1 @$val2";
你是说

push @aoa, [ @$val1, @$val2 ];

还是类似的?

是的,这正是我需要的。谢谢是的,这正是我需要的。谢谢如果需要数组中的每个元素,则无需对其进行切片。如果需要数组中的每个元素,则无需对其进行切片。