2013-09-23 1 views
1
use strict; 
use warnings; 
sub test1 { 
my $arg = shift; 
print "$arg"; 
} 
my $rs = \&test1; 
sub test2 { 
my $value = shift; 
print "$value \n"; 
return $rs; 
} 



&test2("hello")->("Bye"); 

Работает нормально, как ожидалось. Но если в test1 sub мы хотим передать параметр из test2 sub. Что-то вродеКак передать параметр в подпрограмму, на которую ссылается какая-либо другая подпрограмма

use strict; 
use warnings; 
sub test1 { 
my $arg = shift; 
print "$arg"; 
} 
my $rs = \&test1; 
sub test2 { 
my $value = shift; 
print "$value \n"; 
return $rs($value); 
} 

&test2("hello")->(); 

Я знаю, что это неправильный синтаксис, но не знаю, как это сделать. Надеюсь, вопрос ясен.

Я хочу, чтобы выход, как привет привет

Не знаете, как сделать это

ответ

2

Invoke Coderefs как $coderef->(@args). Например.

sub hello { 
    my $name = shift; 
    print "Hello $name\n"; 
} 

sub invoke { 
    my ($code, @args) = @_; 
    $code->(@args); 
} 

invoke(\&hello, "World"); 

Выход: Hello World.

2

Ну, у вас есть ссылка на функцию, вам разыменования, как любой другой ссылки с ->

use strict; 
use warnings; 

sub test1 { 
    my $arg = shift; 
    print "$arg"; 
} 

my $rs = \&test1; 

sub test2 { 
    my $value = shift; 
    print "$value \n"; 
    return $rs->($value); # <--- 
} 

test2("hello"); 

# prints 
hello 
hello 
Смежные вопросы