in reply to Re: Bad news for IO::Handle magic (SWYM or sink)
in thread Bad news for IO::Handle magic

Hi tye, good points, but I have a question about this remark:
Don't use single-word, all-lower-case subroutine names. If you do, then you can reduce your risk by either calling them like &mysub(...) or by putting them into a module (and then import them, use the full name with package name in front, or use OO).

I can see there is a potential problem in that calling single word subroutines without parentheses can be confusing to the parser, but what's the difference in this regard between all-lower-case subroutines and (for example) CamelCase subroutines? Or are you warning against redefining future keywords/build-ins?

Joost.

  • Comment on Re^2: Bad news for IO::Handle magic (SWYM or sink)

Replies are listed 'Best First'.
Re^3: Bad news for IO::Handle magic (lowercase subs)
by tye (Sage) on Jul 07, 2004 at 23:05 UTC
    #!/usr/bin/perl use strict; # For debugging: sub dump { my( $name, $ref ) = @_; require Data::Dumper; my $dumper = Data::Dumper->new( [$ref], [$name] ); $dumper->Indent(1)->Useqq(1)->Terse(1); print STDERR $dumper->Dump(); } my $foo = "Test value"; dump( foo => $foo ); # Should instead used: #&dump( foo => $foo ); # ...

    produces:

    abnormal program termination

    Helpful, isn't it? I suspect quite a few people don't immediately see what the problem is. I also suspect that no small number of people could waste quite a bit of time trying to figure this problem out before the solution comes to them and they snack themselves in the forehead.

    Adding the & or renaming the sub to debugDump or moving the sub to a module will solve the problem.

    The problem is that dump is a built-in. I don't care to memorize the entire list of Perl built-ins nor to put my code at risk when new built-ins are added (rarely).

    - tye