2015-09-15 55 views
0

我試圖修改此腳本:如何使用數組切片同時訪問數組中的幾個元素?

#!/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

如果你想在陣列中使用多個標,你必須改變的印記:

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

這是沒有意義的結果分配給一個標量,雖然。使用匿名數組:

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

,或者沒有臨時VAR:

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

它可能仍然無法正常工作,因爲我注意到你用

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

您的意思是

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

或類似的東西?

+0

是的,那正是我所需要的。謝謝! – MadisonCooper