Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: (tye)Re: Regular expression

by Adam (Vicar)
on Jun 08, 2001 at 01:37 UTC ( #86767=note: print w/ replies, xml ) Need Help??


in reply to (tye)Re: Regular expression
in thread Regular expression

Don't forget, "0 but true"


Comment on Re: (tye)Re: Regular expression
(tye)Re2: Regular expression
by tye (Cardinal) on Jun 11, 2001 at 21:58 UTC

    #!/usr/bin/perl -w $_= "193287461528"; "0 but true" while s/(\d)(\d\d\d)(\D|$)/$1,$2$3/; print;
    produces:
    Useless use of a constant in void context at warn.pl line 3. 193,287,461,528

    because the "0 but true" doesn't yet have a numeric value so the "is 0 or 1" test doesn't even get attempted.

    To get "0 but true" to work as an "unwarned useless constant", you have to jump through some interesting hoops:

    #!/usr/bin/perl -w $_= "193287461528"; sub zero() { "0 but true" } BEGIN { if( @ARGV ) { eval '0+zero'; } } zero while s/(\d)(\d\d\d)(\D|$)/$1,$2$3/; print;
    produces
    $ perl warn.pl Useless use of a constant in void context at warn.pl line 9. 193,287,461,528 $ perl warn.pl x 193,287,461,528
    The "()" in "sub zero()" is required for Perl to compile uses of "zero" as a constant (instead of as a subroutine call). The "0+zero" causes Perl to cache a numeric value for the "zero" constant. But you'll note that this caching is done at compile time so I have to use stringy eval to prevent it from happening when I don't want it to. But stringy eval also prevents it from happening at compile time even if that code gets run so I have to use a BEGIN block to get conditional compile-time behavior.

    So, how to use "0 but true" as a unwarned useless constant can be reduced to:

    #!/usr/bin/perl -w $_= "193287461528"; sub zero() { "0 but true" } zero while s/(\d)(\d\d\d)(\D|$)/$1,$2$3/; print; my $x= 0+zero;

            - tye (but my friends call me "Tye")

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (12)
As of 2015-07-06 21:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (83 votes), past polls