/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
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)

Søg
Reklame
Statistik
Spørgsmål : 177417
Tips : 31962
Nyheder : 719565
Indlæg : 6407865
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste