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: beginners-cgi-unsubscr...@perl.org
For additional commands, e-mail: beginners-cgi-h...@perl.org
http://learn.perl.org/


Reply via email to