我有一個2維陣列是這樣的:perl的發送內部陣列作爲參數向子程序
$map[0][0] = 'a';
$map[0][1] = 'b';
$map[1][0] = 'c';
$map[1][1] = 'd';
我想通過僅在$地圖一切[1](通過引用)的子程序。怎麼做 ?
我有一個2維陣列是這樣的:perl的發送內部陣列作爲參數向子程序
$map[0][0] = 'a';
$map[0][1] = 'b';
$map[1][0] = 'c';
$map[1][1] = 'd';
我想通過僅在$地圖一切[1](通過引用)的子程序。怎麼做 ?
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
現在,你知道爲什麼我喜歡->
語法,雖然它確實完全不必要的。它有助於提醒我我正在處理的是什麼。
您可以發送數組引用,
sub mysub {
my ($aref) = @_;
# work with @$aref ..
}
mysub($map[1]);
只需通過標$map[1]
。
fn($map[1]);
sub fn
{
my @loc_map_1 = @{ $_[0] };
請記住,perl沒有「真正的」2維數組。在你的情況下,map
是一個包含2個對數組的引用的數組。