【发布时间】:2018-07-31 09:30:24
【问题描述】:
这个例子运行良好:
use File::Slurp qw(read_file);
local *File::Slurp::read_file = sub {
return 'test';
};
warn File::Slurp::read_file('/root/test.txt'); # return 'test'
这个也是:
use File::Slurp qw(read_file);
local *read_file = sub {
return 'test';
};
warn read_file('/root/test.txt'); # return 'test'
但如果我在 typeglob 中使用函数的全名,它就不起作用并尝试读取文件:
use File::Slurp qw(read_file);
local *File::Slurp::read_file = sub {
return 'test';
};
warn read_file('/root/test.txt');
谁能解释为什么我不能通过完整的命名空间File::Slurp::read_file 重新定义子例程并通过短名称使用?
在对象方法的情况下,它工作正常:
use LWP::UserAgent;
local *LWP::UserAgent::get = sub {
return HTTP::Response->new( undef, undef, undef, 'Hello world' );
};
my $ua = LWP::UserAgent->new;
warn $ua->get()->content;
【问题讨论】: