Perl方法并通过引用传递

Bra*_*roy 0 oop perl pass-by-reference

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

PerlMaven说:

$p->a_method($value);
Run Code Online (Sandbox Code Playgroud)

在幕后,perl将会运行

a_method($p, $value);
Run Code Online (Sandbox Code Playgroud)

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

a_method(\$p, $value)
Run Code Online (Sandbox Code Playgroud)

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

cho*_*oba 9

$p已经包含对象的引用.方法调用需要对对象的引用,并且它是传递给sub的引用.所以,$ self总是一个参考.见perlobj祝福.

#! /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';
Run Code Online (Sandbox Code Playgroud)

输出:

reference
Run Code Online (Sandbox Code Playgroud)