> Dear Guys,
>
> I�ve been trying to develop an application that consists in about 8-10
> scripts that should know about module variables (not OO yet). I read the
> docs and found that I can use a module variable (declared with our) in
> scripts that 'use' that module. Ok, there are:
>
> module1.cgi (declare and define var1)
> main.cgi (declare and initialize var1) "use module1"
> script1.cgi (read and alter var1) "use module1"
> script2.cgi (gets var1 with undefined or previous value) "use module1"
>
>
> I tried with our, importing that var and fully qualified it, but always
> it get the previous value. My question is: Which method is common to
> share data among apps? What Am I doing wrong? Also, I always use
> "strict" and "warnings".
>
Well, first -- I wouldn't name your modules *.cgi .... *.pm is what
everyone expects to see, and in absence of a Good Overriding Reason
you should follow the Principle of Least Astonishment. Naming your
module "module" is also a terrible idea - unless you expect only to
have one ever in your life. Give it a meaningful name.
That said:
The simplest way to create and use fully qualified variables from
another package is just to fully qualify them.
So, you've got some module Segrio's First Module:
SergioPrimo.pm
------------------------------------------------------------
package SergioPrimo;
our ($foo, $bar, $baz);
1;
------------------------------------------------------------
Now, down in your .cgi file, you can use those variables by their
names $SergioPrimo::foo $SergioPrimo::bar etc.
If you want not to have to fully qualify the variable name, you can
use Exporter ... something like
------------------------------------------------------------
package SergioPrimo;
use base 'Exporter';
our @EXPORT_OK = qw / $foo $bar $baz /;
our %EXPORT_TAGS = ( all => [EMAIL PROTECTED] );
our ($foo, $bar, $baz);
1;
------------------------------------------------------------
Now you can say down in your CGI
random.cgi
------------------------------------------------------------
use SergioPrimo (':all'); # import some variables
$foo = 123; # sets $SergioPrimo::foo
------------------------------------------------------------
NOW ... all that being said:
It looks like your more serious problem is: You're trying to store
state in Perl from different contexts, which is surely confusing you
no end.
If you're using just plain-old-CGI, then each and every time your web
server handles an inbound request, a brand new Perl interpreter is
instantiated, SergioPrimo::foo gets built fresh (as undef) and your
.cgi files may or may not set that variable and use them again later.
If you're using some persistent-perl-like product (e.g. FastCGI,
mod_perl) then you will find that SOMETIMES SergioPrimo::foo has the
last value it had, and sometimes it doesn't.
Perhaps you should take a step back and try to explain what you're
trying to do.
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Lawrence Statton - [EMAIL PROTECTED] s/aba/c/g
Computer software consists of only two components: ones and
zeros, in roughly equal proportions. All that is required is to
sort them into the correct order.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>