Perl方法通常以my $self = shift;
开头,然后使用$self
来引用它作为方法的对象。
sub foo {
my $self = shift;
$self->method;
...
return $self->{_foo}
}
另一种方法是直接使用$_[0]
而不是将$_[0]
复制到$self
:
sub foo {
$_[0]->method;
...
return $_[0]->{_foo}
}
现在,效率更高(更快):
将内存分配给新变量$self
,获取列表@_
的第一项,并在每次调用方法时将此值复制到该变量;
每次使用$_[0]
时都会获取数组的第一项?
答案 0 :(得分:5)
纯粹的表现,$_[0]
更快。
@_
然而,现在这种差异在计算方面确实很小。为清晰起见,通常建议使用第一个。
答案 1 :(得分:5)
从技术上讲,如果你有足够高分辨率的基准测试工具,那么使用$_[0]
应该稍微快一点,至少在你只在sub
使用一次或两次的情况下。如果您以相同的方法多次引用该对象,$self
可能会因为避免更多的数组操作而获胜。
所有这些都是绝对,毫无意义。
在过去的15年里,我一直在使用Perl作为我的主要语言。我目前是Perl Web服务的三个维护者之一,每天处理几百万个请求。如果你在我曾经触及过的每个Perl程序的每个调用中在每个方法调用中使用$_[0]
或$self
之间的处理时间差异,那么仍然添加花费的时间少于你提出问题的时间,或者我花了很多时间回答它。可能比我写这句话的时间还要短。差别确实很小。
因此优化可读性而不是尝试微观优化性能。您的维护程序员(包括未来 - 您在六个月内)将感谢您。