OVH Cloud OVH Cloud

Inclure les sub dans des fichiers separes ?

7 réponses
Avatar
Carole Rabon
Bonjour

Je precise, je debute sous Perl ;=) merci par avance pour votre indulgence.
Jusqu'ici, j'ai fais quelques script Perl que je fractionne en utilisant de
simple sub ...

J'aimerais faire en sorte que mon programme charge au demarrage l'ensemble
des
"sub" que j'ai fais d'un repertoire afin de les utiliser dans l'appli mais
ne sais pas comment faire.

Par exemple :

J'ai mon appli:
/Dev/Perl/test-process.pl

J'aimerais qu'il charge :
/Dev/Perl/Modules/*.pm

Par exemple j'ai:
/Dev/Perl/Modules/verif-ping.pm

qui contient par exemple:
sub verif-ping {
<mes commandes>
}

pouvoir appeler dans test-process.pl directement le sub via un simple
&verif-ping;

Merci d'avance pour votre aide

7 réponses

Avatar
Samuel Mouniee
Bonjour,


Je precise, je debute sous Perl ;=) merci par avance pour votre indulge nce.
Jusqu'ici, j'ai fais quelques script Perl que je fractionne en utilisant de
simple sub ...

J'aimerais faire en sorte que mon programme charge au demarrage l'ensembl e
des
"sub" que j'ai fais d'un repertoire afin de les utiliser dans l'appli mai s
ne sais pas comment faire.

Par exemple :
.../...
pouvoir appeler dans test-process.pl directement le sub via un simple
&verif-ping;


en substance, un truc dans le genre ( à adapter, mais vu l'heure
dominicale, je ne suis pas reveillé ) :

sub UNIVERSAL::AUTOLOAD {
local $@ = undef;
eval " require $AUTOLOAD";
die if $@;
goto &$AUTOLOAD;
}

en gros si la procedure n'existe pas, le systeme tentera un AUTOLOAD(),
ce que fait que AUTOLOAD() est la methode dont vous avez besoin. dedans,
il faut charger CORRECTEMENT ( pas comme j'ai fait ) le module, puis
faire un saut directement dans la procedure.

maintenant, je dois dire que pour quelqu'un qui debute,tu mets un peu la
charrue avant les boeufs, tu sais que tu peux faire des groupes de
modules et faire un module de chargement de module ce qui quand on
debute, est plus maintenable qu'un chargeur on demand de modules ( qui
peut faire de superbes bugs ).


Merci d'avance pour votre aide


padkoa :)


.s'nuoM

Avatar
Carole Rabon
Bonjour,

Merci beaucoup pour votre reponse ;=)

En faite, ce que je cherche a faire, c'est n'est pas un "AutoLoad" de module
quand j'en ai besoin,
mais bien de charger systematiquement tous les modules.

maintenant, je dois dire que pour quelqu'un qui debute,tu mets un peu la
charrue avant les boeufs, tu sais que tu peux faire des groupes de
modules et faire un module de chargement de module ce qui quand on
debute, est plus maintenable qu'un chargeur on demand de modules ( qui
peut faire de superbes bugs ).


Peut etre effectivement qu'un module de chargement et des groupes
de module peut faire l'affaire ;=)

En faite, c'est surtout que mon appli fait des kilometres maintenant, en
fractionnant en
plusieurs fichiers, cela me faciliterait quand meme la vie....

Alors question ;=) comment on fait un "loader de module" ayant pour fonction
de lire TOUS les modules ce trouvant dans Modules*.pm comme si je les
avais tous mis dans un seul fichier .pl.

merci

Avatar
Carole Rabon
Hi

Ok, j'ai trouve des soluces ;=), bon c'est peut etre pas idylique a 100%
mais cela depanne ...
- J'ai mis mon repertoire module dans @INC
- J'appel ma sous-routine par un use Modules::usage
- apres, j'appelle via un Usage->message;

cela a l'aire de marcher ;=)

merci a tous ..



"Carole Rabon" a écrit dans le message de
news:41723039$0$29497$
Bonjour,

Merci beaucoup pour votre reponse ;=)

En faite, ce que je cherche a faire, c'est n'est pas un "AutoLoad" de
module

quand j'en ai besoin,
mais bien de charger systematiquement tous les modules.

maintenant, je dois dire que pour quelqu'un qui debute,tu mets un peu la
charrue avant les boeufs, tu sais que tu peux faire des groupes de
modules et faire un module de chargement de module ce qui quand on
debute, est plus maintenable qu'un chargeur on demand de modules ( qui
peut faire de superbes bugs ).


Peut etre effectivement qu'un module de chargement et des groupes
de module peut faire l'affaire ;=)

En faite, c'est surtout que mon appli fait des kilometres maintenant, en
fractionnant en
plusieurs fichiers, cela me faciliterait quand meme la vie....

Alors question ;=) comment on fait un "loader de module" ayant pour
fonction

de lire TOUS les modules ce trouvant dans Modules*.pm comme si je les
avais tous mis dans un seul fichier .pl.

merci





Avatar
Samuel Mouniee
Hi

Ok, j'ai trouve des soluces ;=), bon c'est peut etre pas idylique a 100 %
mais cela depanne ...
- J'ai mis mon repertoire module dans @INC


use lib qw( /chemin/vers/mes/modules/ );

- J'appel ma sous-routine par un use Modules::usage
- apres, j'appelle via un Usage->message;

cela a l'aire de marcher ;=)

merci a tous ..


sinon perldoc perlmod pour la doc expliquant comment gérer des modules
en perl.


.s'nuoM

Avatar
jeanpierre.vidal
"Carole Rabon" wrote in message news:<41720398$0$29508$...
Bonjour

Je precise, je debute sous Perl ;=) merci par avance pour votre indulgence.
Jusqu'ici, j'ai fais quelques script Perl que je fractionne en utilisant de
simple sub ...

J'aimerais faire en sorte que mon programme charge au demarrage l'ensemble
des
"sub" que j'ai fais d'un repertoire afin de les utiliser dans l'appli mais
ne sais pas comment faire.

Par exemple :

J'ai mon appli:
/Dev/Perl/test-process.pl

J'aimerais qu'il charge :
/Dev/Perl/Modules/*.pm

Par exemple j'ai:
/Dev/Perl/Modules/verif-ping.pm

qui contient par exemple:
sub verif-ping {
<mes commandes>
}

pouvoir appeler dans test-process.pl directement le sub via un simple
&verif-ping;

Merci d'avance pour votre aide


Un exemple :

__________ fichier main.pl _________
#!perl -w
use strict;

require 'fonctions.pl';

my $a = 3;
my $b = 5;

print mul($a, $b), "n";
__END__


__________ fichier fonctions.pl __________
#!perl -w
use strict;

sub mul {
my ($x, $y) = @_;
return $x * $y;
}

1; # retourne 'vrai' lors du require
__END__


Tout se passe comme si la fonction 'mul' était insérée dans le source
de 'main.pl'. Sauf que des variables déclarées dans 'main.pl' ne
seront pas accessibles dans 'fonctions.pl'... et réciproquement.

Jean-Pierre

Avatar
Jérémy JUST
On 17 Oct 2004 13:41:40 -0700
(Jean-Pierre Vidal) wrote:

require 'fonctions.pl';


C'est un peu désuet d'appeler les modules « *.pl ».
Depuis Perl 5, le suffixe pl est réservé aux programmes, et les
modules sont des « *.pm ».

--
Jérémy JUST

Avatar
Paul Gaborit
À (at) 18 Oct 2004 09:33:20 -0700,
(Jean-Pierre Vidal) écrivait (wrote):
D'un autre côté en utilisant *.pm je m'affranchirais des quotes et un
simple

require fonctions;

ou

use fonctions;

suffirait... avec, en prime, la portabilité de la syntaxe '::' si le
module se trouve dans un autre répertoire :

require 'func/fonctions.pl'; vs require func::fonctions;


Il ne faut pas oublier les conventions implicites en Perl : les noms de
modules entièrement en minuscules sont réservés pour l'usage "interne" de perl
(on les appelle alors des pragmas comme par exemple 'strict', 'warnings' ou
'threads').

Donc, dans votre cas :

use Fonctions;

ou

use Func::Functions;


--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>