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

时间:2015-09-15 16:00:14

标签: 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 "$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";    

    }
}

在脚本结束时,我希望能够在字段0-2中使用变量$ aoadata1和$ aoadata2。但是,我不能让他们停止抛出有关未正确引用的错误(我认为)。任何人都可以告诉我为什么会发生这种情况/如何解决它?

感谢。

1 个答案:

答案 0 :(得分:5)

如果要在数组中使用多个下标,则必须更改sigil:

@array[ 0 .. 2 ];
@{ $arra_ref }[ 0 .. 2 ];

将结果分配给标量是没有意义的。使用匿名数组:

my $aoadata1 = $aoa[$k];
my $vect1 = [ @{ $aoadata1 }[ 0 .. 2 ] ];

或者没有temp var:

my $vect1 = [ @{ $aoa[$k] }[ 0 .. 2 ] ];

它可能仍然不起作用,因为我注意到你使用了

push @aoa, "@$val1 @$val2";

你的意思是

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

或类似的东西?