Matt Whipple pisze:
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.
The package name and the file name are the same on my machine. I simply forgot to correct it when writing my last e-mail. I'm using the proper syntax, that is packagename::functionname;

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.

I will read up on that, thanks.

    &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; ?

Got both in the file now.

(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 changed all the permissions and what I get now is that everything works fine but whenever I make changes to the .pm file I need to restart the server that is running locally for the changes to be seen in my main script... This is not the case on the live target server where I use both the .pm file and the scripts. So, after all, everything is sort of OK right now.


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