Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

How to find barewords in perl code?

by mithaldu (Monk)
on Jun 01, 2010 at 14:57 UTC ( #842630=perlquestion: print w/replies, xml ) Need Help??
mithaldu has asked for the wisdom of the Perl Monks concerning the following question:

I am currently rewriting a rather large code-base that makes extensive and terrifying use of bareword filehandles. In order to clean it up i intend to replace them all with proper FileHandle objects. However quite a few of them have very imaginative names like "G".

So, in order to make this task a bit more sane to complete: Is there some kind of module i can run the code through which parses it and can tell me where barewords are?

Replies are listed 'Best First'.
Re: How to find barewords in perl code?
by moritz (Cardinal) on Jun 01, 2010 at 14:58 UTC
    I'm pretty sure that Perl::Critic can be used to detect bareword filehandles, it probably even has a pre-defined rule for that.
      It does! Thanks a lot.
Re: How to find barewords in perl code?
by JavaFan (Canon) on Jun 01, 2010 at 16:02 UTC
    And if it wasn't for perlcritic, I'd think that /(?:open(?:dir)?|print|close|flock|readdir)\s+[A-Za-z] would find most of them, with little false positives. (Of course, one can easily construct false positives and false negatives).
      I'd add a (?![,(]) to the end of that regex to exclude print functioncall() and print functionall, otherstuff.

      Now let the bikeshedding and micro-optimizations begin!

        Hmmm, forgot about function calls like that. For some reason, I assumed perl would warn. But even this is warning free:
        sub foo {shift} sub bar {1} print foo bar;
        and just prints 1.

        OTOH, in pre-5.6 days, when I was still using bare word file handles, I used all uppercase names, and I use all lowercase for subs, so /(?:print|...)\s+[A-Z]/ would have worked for my code.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://842630]
Approved by moritz
Front-paged by moritz
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (6)
As of 2017-12-16 13:48 GMT
Find Nodes?
    Voting Booth?
    What programming language do you hate the most?

    Results (453 votes). Check out past polls.