2010-03-26 6 views
-1

Est-il possible d'enregistrer du code Perl dans une base de données, puis de le récupérer à l'aide d'une instruction select, puis d'exécuter ce code Perl? J'ai essayé d'utiliser eval, mais cela ne semble pas fonctionner.Mon programme Perl peut-il exécuter du code stocké dans une base de données?

Voici ce que je suis en train en ce moment et il ne semble pas fonctionner:

my $temp = $qryResults[0]; 
print $temp."\n"; 
eval{"$temp"}; 

la sortie est $con->Disconnect();exit;

+8

@TheGNUGuy Veuillez expliquer pourquoi vous voulez faire cela. Votre exemple montre un problème de sécurité. Il y en a beaucoup beaucoup d'autres. Si vous expliquez le * pourquoi * et le * quoi *, peut-être que nous pouvons offrir une alternative plus sûre. –

+1

S'il vous plaît ne pas faire cela. Dites-nous pourquoi vous pensez que vous devez faire cela et peut-être que nous pouvons vous guider vers un meilleur chemin. :) –

+0

J'essaie de faire un bot jabber que je peux utiliser pour contrôler une de mes machines distantes. Je veux utiliser la base de données pour stocker les commandes et les actions que le bot peut effectuer. – cskwrd

Répondre

6

Vous juste besoin:

eval $temp; 

La raison pour laquelle votre version ne fonctionne pas est due à la forme de bloc de eval évaluation comme si vous aviez écrit une chaîne simple:

eval{"perl code here"} 

est comme l'écriture de cette ligne de perl:

"perl code here" 

Ce n'est pas du code, c'est une chaîne. La forme de bloc évalue ce qui se trouve à l'intérieur du bloc. Si une chaîne est à l'intérieur du bloc, c'est juste une chaîne, pas un script. La forme de corde évalue ce qui est à l'intérieur de la corde.

+3

Oui. Même s'ils sont tous les deux appelés 'eval',' eval {BLOCK} 'et' eval "STRING" 'ne sont pas ** interchangeables. –

+2

Beaucoup de sessions de programmation en larmes ont commencé avec "hé, si je viens d'utiliser eval ...". Mon conseil: NE PAS. – Ether

1

j'ai tout compris; si j'enlève les accolades alors ça marche.

+1

Bonne chance, vous allez en avoir besoin. – Ether

Questions connexes