Paweł Prędki wrote:
> <file mydbtest.pm>
> package dbredwings;
For organization reasons, you should probably make the package name
match the file name
>
> my $platform = "mysql";
> my $database = "dbplayers";
> my $host = "localhost";
> my $tablename = "players";
> my $user = "player";
> my $pw = "pass";
>
> sub printout {
> print shift;
> }
>
> sub get_platform {
> print $platform;
> }
> 1;
> </file mydbtest.pm>
>
> <file properscript.cgi>
> require 'mydbtest.pm';
> print "Content-type: text/html\n\n";
> &mydbtest::printout('hey hey'); # (1)
A package is a logical grouping within code, and it is through packages
which you would specify functions. Once a file is loaded (here through
require) into memory, the original filename becomes somewhat
inconsequential. These functions should therefore be
dbredwings::printout, etc. (here also dropping the & which is considered
somewhat deprecated for simple function calling). This is the reason
for the previous comment about package naming.
I'd suggest reading the perlmod perldoc section a bit more, or cut out
packaging all together if you're not taking advantage of it and treat
the code as one big scary scope.
> &mydbtest::get_platform; # (2)
> print $mydbtest::platform; # (3)
> </file properscript.cgi>
>
> (1) works without any problems. I get the proper output in my browser
> window.
Dumb luck... use strict; use warnings; ?
> (2) doesn't work at all. I get an error as follows:
> Undefined subroutine &mydbtest::get_platform called at
> E:/webdev/perl/properscript.cgi line 42.
> (3) prints an empty string
>
> Also, I get an error message saying that the .pm file can't be found
> when I place it in the same directory as the .cgi files. I have to
> move it to a directory in the @INC array when I run it through the
> server. However, when I run it locally, from the command line,
> everything works just fine. This makes me think that there is
> something in the Apache config that I have to do in order for all this
> to work but I don't know what that is.
The require statement access the file directly (outside the Web server),
so it wouldn't be Apache's configuration. It could be a permissions
problem however.
>
> I'm running ActivePerl 5.10.1 with Apache2.2 with mod_perl.
> Alias /perl "E:\webdev\perl"
> <Location /perl>
> SetHandler perl-script
> PerlResponseHandler ModPerl::Registry
> Options +ExecCGI
> PerlOptions +ParseHeaders
> </Location>
> ScriptAlias /cgi-bin/ "E:/webdev/perl/cgi-bin/"
>
> Cheers,
> palo
>
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/