develooper Front page | perl.perl5.porters | Postings from July 2002

Re: Thread::Use - use a module inside a thread only

From:
Jenda Krynicky
Date:
July 30, 2002 07:05
Subject:
Re: Thread::Use - use a module inside a thread only
Message ID:
3D46B921.30788.149DF347@localhost
Date sent:      	Tue, 30 Jul 2002 15:20:39 +0200
To:             	"Jenda Krynicky" <Jenda@Krynicky.cz>, perl5-
porters@perl.org,
  	perl-ithreads@perl.org
From:           	Elizabeth Mattijsen <liz@dijkmat.nl>
Subject:        	Re: Thread::Use - use a module inside a thread only

> At 02:54 PM 7/30/02 +0200, Jenda Krynicky wrote:
> >The problem with run-time "useit Foo" instead of compile-time "use
> >Foo" is that the symbols are not exported while compiling, prototypes
> >not "installed", constants not defined, etc. etc. etc.
> 
> Well, I guess YMMV...  prototypes aren't much use in an OO environment
> anyway, exports seems to work fine, judging from the testing that I
> did.  Constants may be another problem, let me check up on that...

Even if there's no prototype defined for a function, the fact that 
perl knows about it already IS important. Try to run this:

	#perl
	foo 1,2,3;
	sub foo {print join(', ', @_), "\n"};

or this:

	#perl
	eval q{
		sub foo {print join(', ', @_), "\n"};
	};
	foo 1,2,3;

I bet you'll see the same problems with "useit Module".

> >Would not it be simpler then to require() or do() the whole thread?
> >         use threads;
> >         $thread = threads->create(sub {do 'worker_thread.pl';}) ...
> 
> Simpler by having to have a different file?  That doesn't make it
> simpler for me...  ;-)

Well, for the simple tests and benchmarks it seems to make things 
more complex, but if you have anything longer than a few lines it is 
better to separate it out into a different file anyway.

And if you do not like separating out into a file, you can use an 
eval('...').

Anyway in almost all the threaded programs I ever made in Perl (Perl 
5.6.1, Win32, fork(), no shared variables) I use do() and separate 
files and it seems to work very well.

Jenda

P.S.: Since I need to be able to create .exe files out of the scripts 
I'll stay on 5.6.1 until there's a version of ActiveState's PDK for 
5.8. At least for production purposes.
=========== Jenda@Krynicky.cz == http://Jenda.Krynicky.cz ==========
There is a reason for living. There must be. I've seen it somewhere.
It's just that in the mess on my table ... and in my brain
I can't find it.
					--- me




nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About