如何在perl中将参数转发给超级函数?

时间:2018-05-31 14:29:04

标签: perl

我是一个非常好的初学者,但我(或多或少)有这段代码:

span

使用以下方法调用该方法:package Base; sub foo{ my ($self, $first, $second, $third) = @_; # do some magic here! } package Subclass; use base qw(Base); sub foo{ my ($self, $first, $second, $third) = @_; #do something with $first only return $self->SUPER::foo($first, $second, $third); }

是否有一种更简洁的方式来调用$self->foo("Hey", "what's", "up");,而无需再次重复所有参数列表?

2 个答案:

答案 0 :(得分:5)

你可以重复使用@_来传递像这样的参数

$self->SUPER::foo(@_);

由于@_的第一个元素是"对象"用于调用类方法,您不希望将其传递给父类方法两次,因此您应该先使用shift将其删除。

sub foo{
  my $self=shift;
  my ($first, $second, $third) = @_;
  #do something with $first only
  return $self->SUPER::foo(@_);
}

答案 1 :(得分:0)

这实际上可能是&function;电话的有效用途之一。

E.g。

&SUPER::foo;

正如perlsub中所述 - 这使@_对被调查者可见。

它应该谨慎使用,因为它偏离了你通常预期会发生的事情 - 它不会传递args,它会使相同的设置可见'可见'可见'可见'可见'可见' 39 ;.