Bra*_*roy 0 oop perl pass-by-reference
对我来说,Perl引用很难掌握.在阅读使用对象方法的一些类似OO的脚本时,我从未将该对象视为参考.即使对于大对象,也可以将其用作参考而不是复制到子例程(方法).
Run Code Online (Sandbox Code Playgroud)$p->a_method($value);在幕后,perl将会运行
Run Code Online (Sandbox Code Playgroud)a_method($p, $value);
但如果$p是巨大的对象,你不想把它作为参考传递吗?
a_method(\$p, $value)
Run Code Online (Sandbox Code Playgroud)
我一直都明白,如果对象很大,通过引用传递可以导致显着的速度增加.在OO中,您很可能正在使用大型对象(例如巨大的对象XML::Twig).那么当实际将它作为对子程序的引用传递时,如何在这样的对象上调用方法呢?
$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)