perl将内部数组作为参数发送给子例程

perl将内部数组作为参数发送给子例程,perl,Perl,我有这样一个二维数组: $map[0][0] = 'a'; $map[0][1] = 'b'; $map[1][0] = 'c'; $map[1][1] = 'd'; 我只想将$map[1](通过引用)下的所有内容传递给子例程。如何做到这一点?您可以发送数组引用 sub mysub { my ($aref) = @_; # work with @$aref .. } mysub($map[1]); 您可以发送数组引用 sub mysub { my ($aref) = @_;

我有这样一个二维数组:

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

我只想将$map[1](通过引用)下的所有内容传递给子例程。如何做到这一点?

您可以发送数组引用

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

  # work with @$aref ..
}

mysub($map[1]);

您可以发送数组引用

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

  # work with @$aref ..
}

mysub($map[1]);

只需传递标量
$map[1]

fn($map[1]);

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

请记住,perl没有“真正的”二维数组。在您的例子中,
map
是一个数组,它包含对数组的两个引用

只需传递标量
$map[1]

fn($map[1]);

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

请记住,perl没有“真正的”二维数组。在您的例子中,
map
是一个数组,它包含对数组的两个引用

Perl没有多维数组

您拥有的是一个数组,该数组的每个元素都是对另一个数组的引用。您可能想了解一下,因为这是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]
包含数组引用。Thqt意味着您可以传递
$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

现在,您知道为什么我喜欢
->
语法了,尽管它实际上完全没有必要。它有助于提醒我正在处理什么。

Perl没有多维数组

您拥有的是一个数组,该数组的每个元素都是对另一个数组的引用。您可能想了解一下,因为这是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]
包含数组引用。Thqt意味着您可以传递
$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
现在,您知道为什么我喜欢
->
语法了,尽管它实际上完全没有必要。这有助于提醒我正在处理的事情