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
>>
>
>
|