2010-09-24 6 views
0

J'ai une question relative au code dynamique Perl. Y a-t-il une construction en Perl où je pourrais utiliser pour exécuter du code?Comment puis-je exécuter du code dynamique en Perl?

Par exemple,

$command = " some command"; 
$perl -> execute($command); 

$command changements dans le temps d'exécution. Désolé pour ma terminologie. Je ne sais pas comment l'expliquer autrement.

J'essaye d'accomplir ceci: J'ai une fonction qui exécute une certaine commande pour chaque référence dans un tableau.

...insert example call to function... 

Disons que chaque référence a un identifiant associé.

...insert sample reference... 
...say something about how you determine the identifier... 
...say something about how you want to use the identifier... 

je ne peux pas parcourir le tableau et à exécuter pour chaque référence depuis une partie de la commande varie pour chaque référence car il a une partie de l'identificateur et il n'y a pas de liste exhaustive des identifiants. Par exemple, si $r0 a un identifiant 'r0', la commande $r0->test("r0") doit être exécutée.

+1

Remplissez les bits que j'ai indiqués. :) –

Répondre

1

Vous pouvez utiliser eval:

eval($command); 

De the manual:

eval EXPR

Dans la première forme, la valeur de retour de EXPR est analysée et exécutée comme si elle était un petit programme Perl ...

+1

Oui, mais je préférerais ne pas. Je pense que c'est très effrayant. – Powertieke

+0

Merci beaucoup. – Sinduja

+0

"besoin" est un peu fort. Nous ne savons même pas vraiment ce qu'il est en train de faire. –

5

S'il s'agit d'une commande externe, vous pouvez utiliser l'une des system, des guillemets ou un module Perl pour ce genre de chose.

Si vous souhaitez compiler et exécuter du code Perl lors de l'exécution, vous pouvez utiliser eval. Dans de nombreux cas, les gens abusent eval parce qu'ils ne voient pas la façon la plus simple de faire les choses.

Si vous voulez décider quel sous-programme exécuter en fonction de la situation, vous pouvez faire plusieurs choses, notamment en utilisant des références logicielles (ick !, mais utiles parfois), des tables de répartition, etc.

Si vous voulez choisir une méthode basée sur la valeur d'une variable, qui est trop facile:

$object->$method(...) 

Cependant, vous auriez à nous dire ce que vous essayez d'accomplir. Je ne suis toujours pas sûr de ce que vous demandez, mais cela ne ressemble pas vraiment à quelque chose de dynamique. Je pense que c'est la situation que vous décrivez. Dites-moi à quel point cela est:

my @array = ([ 'r0', 'foo', 'bar' ]); 

foreach my $element (@array) { 
     my($identifier, @other_stuff) = @$element; 
     $element->test($identifier); 
     } 

Il serait vraiment utile si vous pouvez montrer quelques éléments de l'échantillon et une plus complète, si même code de pseudo, aperçu de ce que vous avez. Nous savons seulement ce que vous nous dites dans votre question, pas tout ce que vous savez de votre propre problème.

+0

Merci brian. J'essaye d'accomplir ceci: J'ai une fonction qui exécute une commande pour chaque référence dans un tableau. Disons que chaque référence a un identifiant associé. Je ne peux pas parcourir le tableau et exécuter pour chaque référence car une partie de la commande varie pour chaque référence car elle contient une partie de l'identifiant et il n'y a pas de liste exhaustive d'identifiants. Par exemple, si $ r0 a un identifiant 'r0', la commande $ r0-> test ("r0") 'doit être exécutée – Sinduja

+0

Modifiez votre question pour inclure des informations supplémentaires ou de clarification. Montrez-nous un exemple de ces éléments de tableau et comment l'identifiant est mappé sur le code. Plus vous nous donnez d'informations, plus nous pouvons vous aider. –

+0

J'ai posté la question éditée – Sinduja

Questions connexes