|
| 3 problemer (strict, packages og dele vari~ Fra : Madsen |
Dato : 25-07-04 23:15 |
|
Sidder og hygger mig lidt med lidt Perl leg, men har fået et par
småproblemer som kort kan vises med nedenstående kode.
#use strict;
use vars (@ISA);
use Net::Server::Fork;
use Exporter;
our (@EXPORT);
our @ISA = qw{Exporter};
@ISA = qw(Net::Server::Fork);
__PACKAGE__->run(proto => "tcp",port => 10001);
sub process_request {
while( <STDIN> ){
&TestPackage::count;
print $TestPackage::var;
}
}
package TestPackage;
@EXPORT = qw{count $var};
sub count()
{
$var++;
return $var;
}
Problem 1:
Hvorfor kan jeg ikke bruge strict?: Global symbol "@ISA" requires explicit
package name at test.pl line 6.
Problem 2:
Burde jeg ikke kunne kaldt count() uden at angive package navn, når jeg har
brugt @EXPORT?
Problem 3:
$var nulstilles ved hvér fork Hvordan sætter jeg $var således at hvér thread
importerer den aktuelle værdi af $var. Med andre ord: Jeg ønsker at dele
variablen mellem alle fork
På forhånd tak for input
--
Mvh
| |
Tore Aursand (26-07-2004)
| Kommentar Fra : Tore Aursand |
Dato : 26-07-04 00:48 |
|
On Mon, 26 Jul 2004 00:14:48 +0200, Madsen wrote:
> #use strict;
> use vars (@ISA);
> use Net::Server::Fork;
> use Exporter;
> our (@EXPORT);
> our @ISA = qw{Exporter};
>
> Problem 1:
> Hvorfor kan jeg ikke bruge strict?: Global symbol "@ISA" requires
> explicit package name at test.pl line 6.
Det ser jo ut til at du benytter Perl 5.6.0 (eller nyere), og da trenger
du ikke 'use vars' i det hele tatt. Les dokumentasjonen;
perldoc vars
perldoc -f our
> Burde jeg ikke kunne kaldt count() uden at angive package navn, når jeg
> har brugt @EXPORT?
Fordi du mangler 'use TestPackage'?
--
Tore Aursand <tore@aursand.no>
"USA Today has come out with a new survey - apparently, three out of
every four people make up 75% of the population." (David Letterman)
| |
Stig H. Jacobsen (26-07-2004)
| Kommentar Fra : Stig H. Jacobsen |
Dato : 26-07-04 13:01 |
|
On Mon, 26 Jul 2004 00:14:48 +0200, Madsen wrote:
> @ISA = qw(Net::Server::Fork);
> Problem 3:
> $var nulstilles ved hvér fork Hvordan sætter jeg $var således at hvér thread
> importerer den aktuelle værdi af $var. Med andre ord: Jeg ønsker at dele
> variablen mellem alle fork
Først: fork() laver ikke threads, men processes.
Mht. at dele $var, så fungerer fork(2) sådan, at barnet bliver en
kopi af forældren, inkl. kode, variable, filehandles, osv.
Men siden $var ikke er sat endnu ved dit fork()-kald, så arver
børnene $var uden at den har fået nogen værdi. Den bliver altså
ikke nulstillet - den var undef allerede.
Hvis du virkelig vil have en variable delt mellem et antal
processes, så kan du bruge IPC (InterProcess Communication). Det
kan godt være en lidt langhåret affære - start med at læse Perl's
IPC dokumentation (man perlipc).
--
Stig
(remove the 'no's to send me mail)
| |
|
|