in reply to Re: standard perl routine
in thread standard perl routine

If I understand the docs correctly, POSIX automatically exports pretty much everything except for subroutine names that conflict with Perl built-ins. If you wish to protect your namespace, the easiest way to override this unfortunate behavior is to invoke POSIX like this:

use POSIX (); # Import nothing. print POSIX::pow( 2, 3 ); # Use the fully-qualified name.

Dave

Replies are listed 'Best First'.
Re^3: standard perl routine
by BrowserUk (Patriarch) on Apr 30, 2006 at 08:01 UTC

    Specifying an import list explicitly prevents POSIX from importing anything other than the functions you specify:

    c:\test\546536>p1 print scalar keys %main::;; ## Before use POSIX main has how many glob +als? 67 use POSIX qw[ pow ];; print scalar keys %main::;; ## and after is has 72 Terminating on signal SIGINT(2) c:\test\546536>p1 $h{ $_ }++ for keys %main::;; ## Record what we have before use POSIX qw[ pow ];; $h{ $_ }++ for keys %main::;; ## Again after print for grep{ $h{ $_ } == 1 } keys %h;; ## Display the differences _<c:/Perl/lib/auto/POSIX/POSIX.dll XSLoader:: POSIX:: pow _<POSIX.c

    Two 'private' paths, two new namespaces and one new function (pow) in main.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

      Ah, so it does. Good call. The same mechanism that makes use POSIX (); (ie, import an empty list) exclude all, also makes use POSIX qw/pow/; exclude all others.


      Dave