http://www.perlmonks.org?node_id=1017978


in reply to Redefining Imported Subs: of scope and no

Not surprising, $/="\n" assignment is always true

Ack!

5.12 is not a module (maybe you wants features)

I didn't know that. From the use docs:

use VERSION also enables all features available in the requested version as defined by the feature pragma,

In any case, like the op I'm wondering where the name 'say' is stored? It is not in main's symbol table:

use strict; use warnings; use 5.012; our $x; use Data::Dumper; say Dumper($main::{x}); #%main:: is the name of the symbol table say Dumper($main::{say}); say Dumper($main::{print}); --output:-- $VAR1 = *::x; #typeglob for 'x', in package ::(shorthand for main::) $VAR1 = undef; $VAR1 = undef;

So it appears that the name 'say' might be in the same place as the name 'print', i.e. not in the main:: symbol table. But then why doesn't 'use subs' succeed in redefining say()? Then again, I can't redefine print() with 'use subs' either:

use strict; use warnings; use 5.012; use subs qw( print ); sub print { printf "%s %s\n", shift, 'world'; } print 'hello'; --output:-- hello

I am able to redefine the chdir() builtin:

use strict; use warnings; use 5.012; use Data::Dumper; say Dumper($main::{chdir}); --output:-- $VAR1 = undef;
use strict; use warnings; use 5.012; use subs qw( chdir ); sub chdir { printf "%s %s\n", shift, 'world'; } chdir 'hello'; --output:-- hello world

It appears that some builtins are more builtin than others.

Replies are listed 'Best First'.
Re^2: Redefining Imported Subs: of scope and no
by Anonymous Monk on Feb 09, 2013 at 21:45 UTC

    ...

    Hit the reply link, the reply link, the link that says reply to reply to the post you want to reply to , that is the link you're supposed to click to have threaded discussion, otherwise it is not theaded discussion but a flat list, flat lists are not effective for following a conversation, that is why the twitts and other "chats" use the @username stuff, so click the reply link and its like this isn't some chat and not flat at all...

    As to your question, CORE is CORE::, many threads about CORE::, ex::override

    perl -e " CORE::say 1 ; "
    perl -e " CORE::say 1 ; say 2 "
    perl -E " CORE::say 1 ; say 2 "

      > Hit the reply link, the reply link, the link that says reply to reply to the post you want to reply to , that is the link you're supposed to click to have threaded discussion, otherwise it is not theaded discussion but a flat list, flat lists are not effective for following a conversation, that is why the twitts and other "chats" use the @username stuff, so click the reply link and its like this isn't some chat and not flat at all...

      Great hip hop ... I'd love to see a XKCD referencing this song! =)

      Cheers Rolf

      Say::Compat - Backwards compatibility wrapper for say()