OVH Cloud OVH Cloud

Problème d'appel de module

4 réponses
Avatar
Slyv
Bonjour à tous,

Je suis en train d'essayer de me faire un fichier avec tous mes sous
programmes pour les appeler ensuite de mon script principal, mais j'ai une
erreur que je ne comprends pas du tout sachant que je ne la trouve pas
logique :(, la fameuse erreur "mon_module.pm did not return a true value
..." mais je vois pas pourquoi vu que j'ai bien spécifié le "1;" à la fin
!!!

Voici le code actuel entre mon script principal (script.pl), et mon module
qui contiendra les fonctions externes à termes (mon_module.pm).

script.pl qui contient le code suivant :

#!/usr/bin/perl
print "Content-type: text/html\n\n";
use strict;
use mon_module;
&test();

mon_module.pm qui contient le code suivant :

#!/usr/bin/perl
use strict;
package mon_module;

sub test{
print 'Hello World';
}
1;

donc je m'attends à un beau Hello World affiché à l'écran et ben non :(

Je précise que les 2 fichiers se situent dans le dossier cgi-bin de mon
apache

Merci à tout ceux qui pourront me dépatouiller de cette situation.

Sylvain

4 réponses

Avatar
Jacques Caron
Salut,

On Fri, 28 Oct 2005 01:59:27 +0200, Slyv wrote:

Je précise que les 2 fichiers se situent dans le dossier cgi-bin de mon
apache


Ce dossier apparaît bien dans ton @INC? Faute de quoi perl va peut-être
chercher une autre version de mon_module.pm qui n'aurait peut-être pas ce
fameux 1;?

Jacques.
--
Oxado http://www.oxado.com/

Avatar
Le_T
Logiquement il doit être dans le dossier @INC, et se terminer par un
1;

Si tu veux récupérer une valeur, il me semble que c'est via

$monmodule::mafonction->$nomdelavariabledanslemodule;

A confirmer
Avatar
MaXX
Bonjour,
Je debute aussi dans l'écriture de modules, je suis parvenu à faire tourner
sous mod_perl le code suivant:
---test.pl---
#!/usr/bin/perl
push @INC ,'/chemin/repertoire/ou/se/trouve/le/module';
use strict;
require 'mon_module.pm';

print "Content-type: text/htmlnn";
&mon_module::test();
------

---mon_module.pm---
#!/usr/bin/perl
use strict;
package mon_module;

sub test{
print 'Hello World';
return 1;
}
1;
------
Je sais c'est dégeu comme méthode mais ça fonctionne... Je dois encore
chercher pour faire ça 'proprement'...
Si un volontaire veut me donner un pointeur plus direct, je prends,
perlmod/perlmodlib me sortent bien des exemples mais j'avoue ne pas tout
saisir...

Slyv wrote:
Bonjour à tous,
[...]

#!/usr/bin/perl
print "Content-type: text/htmlnn";
use strict;
use mon_module;
&test();

mon_module.pm qui contient le code suivant :

#!/usr/bin/perl
use strict;
package mon_module;

sub test{
print 'Hello World';
}
1;



--
MaXX

Avatar
MaXX
Je me sens tout con, je viens de trouver ça dans les exemples de KDevelop
(KDE3.4/freebsd).

package testmodule;

use strict;

require Exporter;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);

# set the version for version checking
$VERSION = 0.1;

@ISA = qw(Exporter);
@EXPORT = qw(&hello);
%EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],

# your exported package globals go here,
# as well as any optionally exported functions
@EXPORT_OK = qw($Var1 %Hashit &func3);

use vars qw($Var1 %Hashit);
# non-exported package globals go here
use vars qw(@more $stuff);

# initialize package globals, first exported ones
$Var1 = '';
%Hashit = ();

# then the others (which are still accessible as $Some::Module::stuff)
$stuff = '';
@more = ();


# file-private lexicals go here
my $priv_var = '';
my %secret_hash = ();


sub hello {
print "hello worldn";
}


END { } # module clean-up code here (global destructor)

1;

__END__

--
MaXX
Windows Longhorn was renamed to "Vista"
"Virus Infections, Spyware, Trojans, and Adware" -Infoworld .