4

サブルーチンrefの配列を反復処理する方法を理解しようとしています。

この構文の何が問題になっていますか?

use strict;
use warnings;

sub yell { print "Ahh!\n"; }
sub kick { print "Boot!\n"; }
sub scream { print "Eeek!\n"; }

my @routines = (\&yell, \&kick, \&scream);
foreach my $routine_ref (@routines) {
  my &routine = &{$routine_ref};
  &routine;
}

前もって感謝します!

4

3 に答える 3

10

あなたのforeachループでは、次は構文エラーです。

my &routine;

変数$routine_refには既にサブルーチンへの参照があるため、その時点で行う必要があるのは、それを呼び出すことだけです。

for my $routine_ref (@routines) {
    &{$routine_ref};
}

Perl ではいつものように、「それを行う方法は複数あります」。たとえば、これらのサブルーチンのいずれかがパラメーターを受け取る場合、次のように括弧内に渡すことができます。

for my $routine_ref (@routines) {
  $routine_ref->();
}

forまた、代わりにを使用したことにも注意してくださいforeach。これは、Damian Conway が Perl Best Practices で提案したベスト プラクティスです。

于 2009-01-17T01:00:05.590 に答える
4
foreach my $routine_ref (@routines) {
        $routine_ref->();
}
于 2009-01-17T00:41:20.870 に答える
0

これを試して:

use strict;
use warnings;

sub yell { print "Ahh!\n"; }
sub kick { print "Boot!\n"; }
sub scream { print "Eeek!\n"; }

my @routines = (\&yell, \&kick, \&scream);
foreach my $routine_ref (@routines) {
  &$routine_ref ();
}
于 2009-01-17T00:30:27.303 に答える