Librairie et fonctions [Perl] - Perl - Programmation
Marsh Posté le 02-08-2006 à 10:36:07
Bonjour,
une bonne habitude à prendre, lorsque tu as fait un package (ou .pm) et que tu l'utilises avec un de tes programmes, c'est d'appeler les fonctions de ce package en les préfixant du nom du package.
Exemple :
Code :
|
Ca te permet de savoir en un seul coup d'oeil que la fonction appelée dans ton script n'est pas inclue dans celui-ci.
Et ça protège également une fonction erreur() que tu aurais codé en plus dans ton script.
Je sais pas si je suis bien clair là ?
Marsh Posté le 02-08-2006 à 10:43:16
Pour être plus clair dans mon exemple :
monscript.pl :
Code :
|
b]MaLibPerso.pm :[/b]
Code :
|
C'est pitet' plus clair là, non ?
Marsh Posté le 02-08-2006 à 10:49:52
Je poursuis mes investigations
Attention, tu ne peux pas avoir une fonction dans un script .pl qui est appelée et utilisée dans un package .pm.
Par contre, tu peux très bien avoir cette fonction stockée dans un package et utiliser ce package via un use classique dans un autre package.
Pour te donner un ordre d'idée, j'utilise dans presque tous mes programmes le package outils.pm, lequel contient diverses fonctions générales comme :
- me retourner l'heure actuelle
- me retourner la date du jour
- procédure automatique pour se connecter à une BDD MySql
Etc etc.
Certaines des fonctions de outils.pm sont utilisées dans d'autres packages. Et ça marche très bien, à condition toutefois dans tes packages d'inclure un use outils.pm;
Marsh Posté le 02-08-2006 à 15:37:28
package XXX::Utils;
BEGIN {
use Exporter ();
@XXX::Utils::ISA = qw(Exporter);
@XXX::Utils::EXPORT_OK = qw(formatDate listbox invHash searchEltArray testNum GetSession EndSession js_changetop js_frameredirect return_listbox );
@XXX::Utils::EXPORT = qw();
}
apres tu mets tes focntions... déclarées ci dessus
Marsh Posté le 03-08-2006 à 11:30:00
Ok merci à vous deux !
Mais ça ne m'aide pas plus
Je ne pourrais pas déclarer une fonction erreur dans la librairie et la "surcharger" dans le programme ?
Non probablement
Tant pis, je vais faire autrement !
Ma fonction erreur est semblable dans 70% des cas, je vais la définir dans la librairie, pour les autres cas, je la définirai dans le programme idoine
Avec l'appel lib::erreur, je ne confondrais pas
Merci
Marsh Posté le 03-08-2006 à 11:35:16
nibbles1 a écrit : Je ne pourrais pas déclarer une fonction erreur dans la librairie et la "surcharger" dans le programme ? |
Qu'est-ce que tu entends par "surcharger" ?
Tu veux une fonction capable de recevoir des arguments ou non ?
Si oui, tu peux très bien avoir ta fonction erreur() dans ton package lib (donc, la fonction lib::erreur), laquelle peut très bien bosser avec ou sans paramètres (arguments).
Exemple :
Code :
|
Mise en situation :
Code :
|
Marsh Posté le 03-08-2006 à 11:55:11
Aricoh a écrit : Qu'est-ce que tu entends par "surcharger" ? |
Ce que je voudrais, c'est que mes différentes fonctions erreur définies dans mes programmes puissent être appelées via les fonctions de la librairie. Or ça n'a pas l'air possible. Après l'histoire des arguments, je vois pas trop le rapport
Quand je disais "suarcharger", je voulais dire :
- définir une fonction erreur dans le package (qui ne fait rien, mais est juste là pour être définie)
- définir mes fonctions erreur dans les programmes
- à l'exécution du programme, on appelle une fonction de la librairie, si on tombe sur un appel de la fonction erreur, par magie il appel la fonction erreur du programme
Si je suis assez clair, tu seras d'accord pour dire que c'est pas du tout faisable n'est-ce pas ?
Je vais donc faire autrement
Merci encore !
Marsh Posté le 06-08-2006 à 20:49:19
nibbles1 a écrit : |
Si c'est possible mais il faut jouer avec les namespaces :
Code :
|
Code :
|
Code :
|
Je critique pas...
Marsh Posté le 31-07-2006 à 12:01:36
Bonjour,
j'ai défini des fonctions dans un module... TestLib.pm, avec un package TestLib. Par exemple test, qui appelle &erreur en cas d'erreur
J'appelle ces fonctions dans script1.pl, script2.pl voire script3.pl
Dans script1, script2 et script3, la fonction erreur est définie différemment.
Bien entendu le problème qui se pose est que lors de l'appel de test, la fonction &erreur est inconnue.
Est-ce que c'est possible ?
Rappel :
TestLib.pl
TestLib.pm :