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 | |
by LanX (Saint) on Feb 09, 2013 at 22:09 UTC | |
by Anonymous Monk on Feb 09, 2013 at 21:48 UTC |
In Section
Seekers of Perl Wisdom