2

重複の可能性:
Perl でディスパッチ テーブルを実装するにはどうすればよいですか?

int(rand()) などのコマンドを含むハッシュ テーブルがあります。これらのコマンドを実行するにはどうすればよいですか?

4

2 に答える 2

5

を使用eval($str)して、文字列変数に保存した Perl コードを実行できます$str。または、コードをハッシュ内の関数参照として保存することもできます。たとえば、次のようになります。

$hash{'random'} = sub { int(rand()) }; 

このように$hash{'random'}->()して、ランダムな値が必要なときはいつでも関数を実行するように書くことができます。

PerlMonks でディスパッチ テーブルを実装するも参照してください。

于 2009-12-15T13:22:31.870 に答える
1

他の人が言ったように、を使用して実行できますeval。ただし、汚染されている可能性のあるオリジンの任意の文字列を経由で実行することevalは、主要なセキュリティ ホールであることに注意してください。また、アプリケーションのパフォーマンスが重要な場合は遅くなる傾向があります。

Safe モジュールを使用してセキュリティ ホールを取り除くことができます (どれだけ防弾かはわかりませんが、naked よりもはるかに優れていますeval)。ただし、Perl はメイン プログラムの実行中にコードを実行する前にコードをコンパイルする必要があるため、常にパフォーマンスの問題が発生します。

于 2009-12-15T13:55:34.537 に答える