我正在尝试修改此脚本:
#!/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。但是,我不能让他们停止抛出有关未正确引用的错误(我认为)。任何人都可以告诉我为什么会发生这种情况/如何解决它?
感谢。
答案 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 ];
或类似的东西?