Вот полный рабочий скрипт, который демонстрирует, что вы спрашиваете.
sub a { print "Hello World!\n"; }
sub b {
my $func = $_[0];
$func->();
}
b(\&a);
Вот объяснение: вы берете ссылку на функцию a
, говоря \&a
. В этот момент у вас есть ссылка на функцию; в то время как обычно функция вызывается с помощью func()
, вы вызываете ссылку на функцию с помощью $func->()
Синтаксис ->
относится и к другим ссылкам. Например, вот пример работы с ссылками на массив и хэш:
sub f {
my ($aref, $href) = @_;
print "Here's an array reference: $aref->[0]\n"; # prints 5
print "Here's a hash ref: $href->{hello}\n"; # prints "world"
}
my @a = (5, 6, 7);
my %h = (hello=>"world", goodbye=>"girl");
f(\@a, \%h);