Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Forks.pm dilemma

by Juerd (Abbot)
on Aug 07, 2003 at 17:42 UTC ( [id://281976]=note: print w/replies, xml ) Need Help??


in reply to Forks.pm dilemma

Or use a source filter ;)

There is a fourth option. You could choose to step away from the threads API and invent your own sub. A sub that takes a reference but has a different name. I don't know of a good name, but let's call it refshare for now. This can be combined with supporting share with the new prototype on newer perls. On older perls you could croak 'Old perl needs refshare(\$foo) instead of share($foo)'.

This has one froblem: s/use forks;/use threads;/ no longer magically makes the program use real threads. But a third module (threads::forks?) could implement a refshare that calls the real share to solve that problem.

Juerd # { site => 'juerd.nl', plp_site => 'plp.juerd.nl', do_not_use => 'spamtrap' }

Replies are listed 'Best First'.
Re: Re: Forks.pm dilemma
by liz (Monsignor) on Aug 07, 2003 at 18:18 UTC
    ...Or use a source filter ;)

    Can you do source filters in 5.6.x? That would be a solution, simply only apply a source filter for source < 5.8.0 that replaces:

    share( $x );
    with:
    share( \$x );
    under the hood as it were. But I seem to remember source filters were introduced somewhere in the 5.7.x track?

    And no, I don't want to invent my own API. Perl needs a good threads implementation. I'm just trying to make it easier to learn and prototype with it.

    Liz

      Can you do source filters in 5.6.x?

      http://search.cpan.org/src/PMQS/Filter-1.29/README says:

      Before you can build the Source Filters you need to have the following
      installed on your system:
      
          * Perl 5.004 or better. 5.6.0 or better is recommended for Win32.
      

      The source filter can be as simple as (untested)

      package Filter::share; use Filter::Simple; FILTER_ONLY code => sub { s/( \b share \b \s* \(? )(?= \s* [\@\$%] )/$ +1\\/gxe };
      but IIRC, source filters don't work on eval()ed code. OTOH, why would anyone eval a share call... :)

      Juerd # { site => 'juerd.nl', plp_site => 'plp.juerd.nl', do_not_use => 'spamtrap' }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://281976]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (3)
As of 2024-04-19 17:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found