2016-04-01 5 views
0

Я новичок в Perl. Мне просто нужно отправить общую функцию, которая принимает два параметра для другой функции, а затем вызовет первую функцию из второй функции. Я не очень уверен, как это можно сделать. Вот код, который я пытаюсь написать.Как передать функцию в качестве аргумента другой функции в Perl, а затем вызвать ее?

sub add { return $_[0] + $_[1]; } 
sub subt { return $_[0] - $_[1]; } 

sub dosth 
{ 
    my ($func, $num0, $num1) = @_; 
    # how to call code $func with arguments $num0 and $num1 and return the return value of $func 
} 

print dosth(add, 3, 2) . " " . dosth(subt, 3, 2); # desired output: 5 1 

ответ

5

Как это:

sub add { return $_[0] + $_[1]; } 
sub subt { return $_[0] - $_[1]; } 

sub dosth { 
    my ($func, $num0, $num1) = @_; 
    return $func->($num0, $num1); 
} 

print dosth(\&add, 3, 2) . " " . dosth(\&subt, 3, 2); # 5 1 

Интернет в http://codepad.org/RX1auCRn

Хитрость заключается в том, чтобы передать ссылки к подпрограммой dosth, то вы можете позвонить косвенно со стрелкой.

Смежные вопросы