Require & use ? besoin d'aide - Perl - Programmation
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
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
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. |
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)
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 ?
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;
}
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
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