Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^2: use bytes without breaking perl 5.005 or 5.004? (also)

by tye (Cardinal)
on Sep 26, 2003 at 21:10 UTC ( #294544=note: print w/ replies, xml ) Need Help??


in reply to Re: use bytes without breaking perl 5.005 or 5.004?
in thread use bytes without breaking perl 5.005 or 5.004?

Cool.

I had previously convinced myself that because BEGIN requires a block, I couldn't fake out 'use warnings' for people who don't have it but then I realized this works fine:

BEGIN { if( eval { require warnings } ) { warnings->import(); } else { $^W= 1; } }
because the pragmas already expect to be inside of a (invisible) block and so apply themselves to one block further out.

I like this method because it allows the user to install a back-ported warnings.pm or bytes.pm or whatever and use it if they want to and I don't have to trust my knowledge of when the module was added. (:

Anyway, it is another way to do it.

                - tye


Comment on Re^2: use bytes without breaking perl 5.005 or 5.004? (also)
Download Code
Is this fundamentally different than my original try?
by joshclark (Novice) on Sep 28, 2003 at 14:02 UTC
    Thanks Tye! Applying this to "use bytes," am I correct that your solution is basically the same approach as the one I originally suggested? In other words, isn't this...
    BEGIN { if( eval { require bytes } ) { bytes->import(); } }
    ...pretty much the same as this:
    BEGIN { eval {require bytes; import bytes; 1} }
    I'm a bit new to trying to import modules and pragmas outside of the regular "use" function, so I'm just trying to be sure that I understand the difference, if any.

    Thanks! Josh

      Yes, same result. Here is how I tested it:

      > perl { use warnings; } print $x; <EOF> > perl BEGIN { if( {require warnings} ) { warnings->import(); } } print $x; <EOF> Use of uninitialized value in print at - line 3. > perl BEGIN { eval { require warnings; import warnings; } } print $x; <EOF> Use of uninitialized value in print at - line 3. >
      First is the "control" case to show that 'use warnings' inside of a block doesn't have an effect outside of the block. Next is my method, and the warning generated shows that there is an effect (since I have warnings.pm in this version of Perl). Last is your method, which also works.

      The 'hint' pragmas all work very much the same so this trick works for 'strict', 'warnings', 'bytes', etc.

                      - tye

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (7)
As of 2014-11-21 00:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (103 votes), past polls