小编Mic*_*hel的帖子

Perl子程序是按引用调用还是按值调用?

我试图弄清楚Perl子程序及其工作原理.从perlsub我知道子例程是按引用调用的,并且需要一个赋值(例如my(@copy) = @_;)来将它们转换为按值调用.

在下文中,我看到它change被引用称为"a"和"b"变为"x"和"y".但我很困惑为什么数组没有用额外的元素"z"扩展?

use strict;
use Data::Dumper;

my @a = ( "a" ,"b" );

change(@a);

print Dumper(\@a);

sub change
{
    @_[0] = "x";
    @_[1] = "y";
    @_[2] = "z";
}
Run Code Online (Sandbox Code Playgroud)

输出:

$VAR1 = [
          'x',
          'y'
        ];
Run Code Online (Sandbox Code Playgroud)

在下面,我传递哈希而不是数组.为什么键不能从"a"变为"x"?

use strict;
use Data::Dumper;

my %a = ( "a" => "b" );

change(%a);

print Dumper(\%a);

sub change
{
    @_[0] = "x";
    @_[1] = "y";
}
Run Code Online (Sandbox Code Playgroud)

输出:

$VAR1 = {
    'a' => 'y'
};
Run Code Online (Sandbox Code Playgroud)

我知道真正的 …

perl

28
推荐指数
3
解决办法
2万
查看次数

标签 统计

perl ×1