[Perl] Executer le contenu d'une variable

Executer le contenu d'une variable [Perl] - Perl - Programmation

Marsh Posté le 28-12-2004 à 19:01:33    

Je souhaiterai executer le contenu d'un variable en perl. J'ai testé eval, mais ca marche pas.
Voila un exemple de contenu de ma variable :

Code :
  1. my $uptime=`uptime`; print $uptime;


 
et je voudrais donc qu'après avoir executé le contenu, le contenu de ma variable soit du genre :

Code :
  1. 19:09:25 up  4:00,  2 users,  load average: 0.22, 0.19, 0.14


 
Une idée ?
 
(le contenu de la variable est extrait d'un fichier xml, et le contenu est la premiere citation)


Message édité par sharlaan le 28-12-2004 à 19:01:59

---------------
"Deux chose sont infinies, l'univers et la sotise humaine. Mais je ne suis pas sûr de ce j'affirme quant à l'univers." Albert Einstein
Reply

Marsh Posté le 28-12-2004 à 19:01:33   

Reply

Marsh Posté le 28-12-2004 à 21:46:31    

my $uptime='uptime'; print `$uptime`;


Message édité par matafan le 28-12-2004 à 21:46:48
Reply

Marsh Posté le 28-12-2004 à 22:20:56    

my @uptime = `uptime`; # exécute la commande, garde l'output dans l'array @uptime
print join("\n", @uptime);

Reply

Marsh Posté le 28-12-2004 à 22:53:49    

Tout d'un coup j'ai un gros doute sur ce que tu demande... La varialbe que tu veux evaluer, elle contient quoi exactement ? La chaine "my $uptime=`uptime`; print $uptime;" ?

Reply

Marsh Posté le 28-12-2004 à 23:39:03    

oui, la variable que je veux executé contient : "my $uptime=`uptime`; print $uptime;". Et je souhaite que ma variable prenne le résultat de ce qui la contient.


---------------
"Deux chose sont infinies, l'univers et la sotise humaine. Mais je ne suis pas sûr de ce j'affirme quant à l'univers." Albert Einstein
Reply

Marsh Posté le 30-12-2004 à 02:48:59    

j'ai trouvé
il suffit que je fasse :

Code :
  1. my $action = `perl -e '$variable'`;


où variable contient "my $uptime=`uptime`; print $uptime;"
 
 :pt1cable:  :pt1cable:


---------------
"Deux chose sont infinies, l'univers et la sotise humaine. Mais je ne suis pas sûr de ce j'affirme quant à l'univers." Albert Einstein
Reply

Marsh Posté le 30-12-2004 à 06:56:40    

je t'encourage pas à faire ce genre de truc, c'est plutot immonde...

Reply

Marsh Posté le 01-01-2005 à 16:31:17    

arf :/
et t'as une idée pour le faire de maniere propre ?


---------------
"Deux chose sont infinies, l'univers et la sotise humaine. Mais je ne suis pas sûr de ce j'affirme quant à l'univers." Albert Einstein
Reply

Marsh Posté le 01-01-2005 à 16:52:46    

je comprend pas vraiment ce que tu essaies de faire, pour moi interpréter un bloc de texte en perl on utilises eval()

Reply

Marsh Posté le 01-01-2005 à 17:26:23    

bah, le bloc de text c'est pour les test, car après je mettrais des regex, et avec eval, j'ai pas réussi.
C'est le premier truc auquel j'ai pensé, mais ca marchait pas.
Je vais restester alors.


---------------
"Deux chose sont infinies, l'univers et la sotise humaine. Mais je ne suis pas sûr de ce j'affirme quant à l'univers." Albert Einstein
Reply

Marsh Posté le 01-01-2005 à 17:26:23   

Reply

Marsh Posté le 01-01-2005 à 17:31:13    

je devais etre très fatigué quand j'avais testé eval ...
 
je viens de le refaire, et ca marche


---------------
"Deux chose sont infinies, l'univers et la sotise humaine. Mais je ne suis pas sûr de ce j'affirme quant à l'univers." Albert Einstein
Reply

Marsh Posté le 01-01-2005 à 17:41:59    

if ($^O eq 'linux') || die 'Commande non supporté sur cet os';
$pid = open(HANDLE, "/usr/bin/uptime |" );
while() { print; }
close(HANDLE);
 

Citation :

NAME
 Sys::Uptime - Info on CPU load, uptime, users and number of CPU's installed.
 
SYNOPSIS
 use Sys::Uptime;
 
 my $users  = Sys::Uptime->users;
 my @load   = Sys::Uptime->loadavg;
 my $uptime = Sys::Uptime->uptime;
 my $nbrcpu = Sys::Uptime->nbrcpu;
 
 print "Users logged on: $users\n";
 print "CPU load (1min, 5min, 15min): @load\n";
 print "System uptime: $uptime seconds\n";
 print "Number of CPU's installed: $nbrcpu\n";
 
DESCRIPTION
 A quick and dirty module that returns CPU load, uptime, users and number of CPU's installed.
 Currently only tested on Linux.
 
COPYRIGHT
 
 Copyright (c) 2004 Wim De Hul.
 All rights reserved.
 This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.  
 
 
ADRESSE: http://cpan.cict.fr/modules/by-cat [...] .01.readme


Message édité par ouned-coding le 01-01-2005 à 17:47:06
Reply

Marsh Posté le 01-01-2005 à 17:50:32    

merci, mais c'est pas de ca que j'ai besoin.
J'ai testé sur uptime car je savais pas quoi mettre en fait.
 
Sinon, à la fin de la chaine renvoyé j'ai un "1\n", vous sauriez comment je peux ne pas l'avoir ?


---------------
"Deux chose sont infinies, l'univers et la sotise humaine. Mais je ne suis pas sûr de ce j'affirme quant à l'univers." Albert Einstein
Reply

Marsh Posté le 02-01-2005 à 04:03:07    

\n c'est un retour de ligne
 
alors un petit
$foo =~ s/\n//;

Reply

Marsh Posté le 02-01-2005 à 05:46:08    

chomp() fait ça mieux qu'un s///.

Reply

Marsh Posté le 02-01-2005 à 16:44:14    

matafan a écrit :

chomp() fait ça mieux qu'un s///.


 
j'ai jamais très apprécié les chomp :/
question de philosophie faut croire

Reply

Marsh Posté le 02-01-2005 à 21:44:31    

finalement j'ai fait une regex qui me vire le "1\n" à la fin de chaque chaine :)


---------------
"Deux chose sont infinies, l'univers et la sotise humaine. Mais je ne suis pas sûr de ce j'affirme quant à l'univers." Albert Einstein
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed