Require & use ? besoin d'aide

Require & use ? besoin d'aide - Perl - Programmation

Marsh Posté le 06-05-2004 à 12:31:29    

Salut  a tous. j'ai un probleme avec l utilisation de require en perl. en gros j'ai un fichier avec une 50aine de fonctions et je voudrais les separer en plusieurs fichiers pour mieux m'y retrouver. soit en utilisant 'require' soit en utilisant 'use'.
malgre mon ami google, J'ai du mal avec la syntaxe a utiliser dans les differents fichiers sachant que dans le fichier 2.pl j'ai un fonction qui utilise des variables globales au fichier 1.pl ... besoin d'aide! merci

Reply

Marsh Posté le 06-05-2004 à 12:31:29   

Reply

Marsh Posté le 06-05-2004 à 14:34:38    

SI j'ai bien tout compris... Ca fait ca.. Sinon tant pis.. Je suis débutant aussi.  
La difference entre require et use est academique :
require est plus utilisé dans le genre #include et use
comme import. dans la pratique les deux permettent
d'importer des modules... : use module() ou require module.pm

Reply

Marsh Posté le 06-05-2004 à 14:59:15    

il faut faire des .pm et non des .pl
 
en gros tu a ton script principal dans un .pl, et la tu 'use'ou 'require' tous les .pm qu'il te faut (qui eux-meme peuvent user d'autres .pm)
 
chaque .pm commence par une ligne du genre:
 
package Bidule;
 
pour un fichier s'appelant Bidule.pm
ensuite tu fais simplement
 
use Bidule;
 
dans ton .pl
 
apres pour utiliser une variable globale d'un autre module (déclarée avec 'our' ou sans aucun use strict) tu fait simpelement $Bidule::nom_de_la_variable
 
Pense aussi à terminer tous tes .pm par "1;" sinon le use ou le require va planter

Reply

Marsh Posté le 06-05-2004 à 15:02:19    

ben33 a écrit :

SI j'ai bien tout compris... Ca fait ca.. Sinon tant pis.. Je suis débutant aussi.  
La difference entre require et use est academique :
require est plus utilisé dans le genre #include et use
comme import. dans la pratique les deux permettent
d'importer des modules... : use module() ou require module.pm


 
le use se fait au moment de la compilation (car le code perl est compilé!), quelque soit l'endroit du fichier ou il se trouve. le require est effectué au moment ou il est rencontré, donc par exemple tu peux le mettre dans une structure conditionnelle pour charger un module si une condition donnée est remplie (avec le use il serait chargé dans tous els cas!)
 
l'autre difference est que 'use' va directement importer les symboles exportés par le module usé, alors que le require n'importe rien.
 
donc un
 
use Bidule;
 
est equivalent à un
 
require Bidule;
import Bidule;
 
(avec toujours la difference du compile time vs run time évoqué plus haut)

Reply

Marsh Posté le 07-05-2004 à 02:26:32    

merci a ts les deux... je teste ça :)

Reply

Marsh Posté le 07-05-2004 à 02:34:13    

par contre un petit point..j'ai un fichier 1.pl et un 2.pm. dans 1.pl je use 2.pm et j'ai aussi des globales.. pour les utiliser dans 2.pm dois-je faire $1::variable ?

Reply

Marsh Posté le 07-05-2004 à 03:59:10    

à priori jdirais que tu peux pas les utiliser dans 2. Mais puisque dans 2 c'est des fonctions, créer toi une fonction qui te la retournera
 
ex:
 
test.pl
 
my $value = Malib::get_value1();
 
Malib.pm
 
my $value1 = "toto";
 
sub get_value1 {
  return $value1;
}


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 07-05-2004 à 09:04:21    

le script principal est par defaut appellé "package main;"
 
donc tu peux faire $main::bidule pour referencer cette varaible (et tu n(as pas besoin de faire un use 1.pl dans ton 2.pm)
 
mais comme le dit Burgergold c'est pas tres propre de faire ca, et il vaut mieux bien separer le code de chauqe module (sinon quel est l'interet?) et faire des accesseurs pour les interactions entres modules

Reply

Sujets relatifs:

Leave a Replay

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