2015-01-13 27 views

回答

4

Perl沒有多維數組。

你有什麼是一個數組,該數組的每個元素是參考到另一個數組。您可能想要閱讀大約Perl References,因爲這是Perl允許您構建一些非常複雜的數據結構的方式。

很多人認爲它是一個多維數組,你可以在某些情況下對待它。但是,我更喜歡->語法,這讓我想起這僅僅是對參考的引用。現在

$map[0]->[0] = 'a'; 
$map[0]->[1] = 'b'; 
$map[1]->[0] = 'c'; 
$map[1]->[1] = 'd'; 

,我可以開取數據結構:

  • @map:這是在它的兩個項目,$map[0]$map[1]陣列。
  • $map[0]->[]:這是一個參考到另一個陣列。該數組還必須包含項目。
  • $map[1]->[]:這是另一個參考到另一個數組。該數組中有兩個項目。

請注意,$map[1]->[]表示$map[1]包含數組引用。這意味着你可以通過$map[1]作爲你的內部數組的參考。

mysub ($map[1]); 

這裏有一個簡單的程序:

#! /usr/bin/env perl 
# 
use strict; 
use warnings; 
use feature qw(say); 

my @map; 
$map[0]->[0] = 'a'; 
$map[0]->[1] = 'b'; 
$map[1]->[0] = 'c'; 
$map[1]->[1] = 'd'; 

mysub($map[1]); 

sub mysub { 
    my $array_ref = shift; 

    my @array = @{ $array_ref }; # Dereference your reference 

    for my $index (0..$#array) { 
     say "\$map[1]->[$index] = $array[$index]"; 
    } 
} 

此打印:

$map[1]->[0] = c 
$map[1]->[1] = d 

現在,你知道爲什麼我喜歡->語法,雖然它確實完全不必要的。它有助於提醒我我正在處理的是什麼。

1

您可以發送數組引用,

sub mysub { 
    my ($aref) = @_; 

    # work with @$aref .. 
} 

mysub($map[1]); 
1

只需通過標$map[1]

fn($map[1]); 

sub fn 
{ 
    my @loc_map_1 = @{ $_[0] }; 

請記住,perl沒有「真正的」2維數組。在你的情況下,map是一個包含2個對數組的引用的數組。