Perl方法并通过引用传递

时间:2017-04-06 08:09:26

标签: perl oop pass-by-reference

对我来说,Perl引用很难掌握。在阅读使用对象方法的一些类似OO的脚本时,我从未将该对象视为参考。即使对于大型对象,也可以将其用作参考而不是复制到子例程(方法)。

PerlMaven说:

$p->a_method($value);
     

在幕后,perl将运行

a_method($p, $value);

但如果$p是一个巨大的对象,你不想把它作为参考传递吗?

a_method(\$p, $value)

我一直都明白,如果对象很大,通过引用传递会导致显着的速度增加。在OO中,您很可能正在处理大型对象(例如巨大的XML::Twig)。那么当实际将它作为对子程序的引用传递时,如何在这样的对象上调用方法?

1 个答案:

答案 0 :(得分:9)

$p已包含对象的引用。方法调用需要对对象的引用,并且它将此引用传递给子对象。所以,$ self总是一个参考。请参阅perlobjbless

#! /usr/bin/perl
use strict;
use warnings;
use feature 'say';

{   package Class;

    sub new { bless {}, __PACKAGE__ }
    sub inf { ref shift }
}

my $o = 'Class'->new;
say $o->inf ? 'reference' : 'not a reference';

输出:

reference