我正在尝试修改此脚本:
#!/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";
}
}
Run Code Online (Sandbox Code Playgroud)
.
在脚本结束时,我希望能够在字段0-2中使用变量$ aoadata1和$ aoadata2.但是,我不能让他们停止抛出有关未正确引用的错误(我认为).任何人都可以告诉我为什么会发生这种情况/如何解决它?
谢谢.
如果要在数组中使用多个下标,则必须更改sigil:
@array[ 0 .. 2 ];
@{ $arra_ref }[ 0 .. 2 ];
Run Code Online (Sandbox Code Playgroud)
但是,将结果分配给标量是没有意义的.使用匿名数组:
my $aoadata1 = $aoa[$k];
my $vect1 = [ @{ $aoadata1 }[ 0 .. 2 ] ];
Run Code Online (Sandbox Code Playgroud)
或者,没有temp var:
my $vect1 = [ @{ $aoa[$k] }[ 0 .. 2 ] ];
Run Code Online (Sandbox Code Playgroud)
它可能仍然不起作用,因为我注意到你使用过
push @aoa, "@$val1 @$val2";
Run Code Online (Sandbox Code Playgroud)
你的意思是
push @aoa, [ @$val1, @$val2 ];
Run Code Online (Sandbox Code Playgroud)
或类似的东西?
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |