3 ms·
In Perl, classes/packages are dynamically scoped. So you can safely localise any monkey-patching. For eg: use 5.016; use warnings; package JSONParser
by draegtun 14y ago
In Perl, classes/packages are dynamically scoped. So you can safely localise any monkey-patching. For eg:
use 5.016;
use warnings;
package JSONParser {
sub parse {
my ($self, $str) = @_;
"JSONParser::parse $str";
}
}
package Foo {
sub new { my $class = shift; bless {}, $class }
sub to_json {
my ($self, $str) = @_;
JSONParser->parse($str);
}
}
my $foo = Foo->new;
say $foo->to_json("foo");
{
# OK... I want to amend that JSONParser->parser behaviour
# but just in this scope!
no warnings 'redefine';
local *JSONParser::parse = sub {
my ($self, $str) = @_;
"No Longer JSONParser::parser! $str";
};
say $foo->to_json("bar");
}
say $foo->to_json("baz");
This outputs...
JSONParser::parse foo
No Longer JSONParser::parser! bar
JSONParser::parse baz