2

「string-eval」が使用できることを理解しています。しかし、私はそれなしでそれを達成するためのいくつかの代替手段を探していevalます. 「string-eval」である理由はPerl評論家に失敗し、クライアントポリシーに従って使用できません。

なしでそれを行うための代替手段は何evalですか?

これが私がやろうとしていることです:

動的に生成されたコード参照を関数に渡しています。この関数は、このコード参照を評価し、結果を変数に割り当てます。

4

3 に答える 3

9

「文字列をperlコードとして解釈して実行する」ことは一般に問題の解決策としては不十分であるため、Perlの批評家はstring-evalに反対します。

同じことを行う別の関数を見つけるだけでは回避できません(まあ、できますが、それでは完全に要点が欠けています)。

于 2012-08-06T09:30:59.530 に答える
6

コードリファレンスを実行する必要はありませんeval。コードリファレンスを逆参照して呼び出すだけです。これはperldoc perlrefで説明されています。

my $code = sub {
    my ($name) = @_;
    say "Hi, $name!";
};
$code->('rpg');
于 2012-08-06T10:41:43.037 に答える
0

これは私にとってはうまくいきます。

#!/usr/bin/perl
use strict;
use warnings;

sub exec_code {
    my ($c) = @_;
    return &{$c};
}

my $coderef = sub {
    print "Hello, from sub";
};

exec_code($coderef);
于 2012-08-06T12:15:13.043 に答える