我有一个问题:我想为我的模块M编写一个名为"copy"的方法.这个函数是导入函数File :: Copy :: copy的包装器.所以我必须使用File :: Copy :: copy并定义我自己的副本.但它会有一个错误,说复制被重新定义.如何实现我的目标?
#M.pm
package M;
use File::Copy;
#... constructor and other methods
sub copy {
my $self = shift;
my $target = shift;
File::Copy::copy($self->{'PATH'},$target);
}
Run Code Online (Sandbox Code Playgroud)
我可以想到三种方法
该Subroutine ... redefined at ...消息只是一个警告,而不是错误.如果您"知道他们正在做什么",请no warnings "redefine"在重新定义之前致电.
正如池上所说,不要进口任何东西.或者不要导入所有内容.你可以逃脱
use File::Copy qw(move); # still import move, don't import copy
在重新定义之前,请明确取消定义该函数.你必须在编译时这样做,所以这属于一个BEGIN块:
BEGIN {
undef ©
}
sub copy { ... # redefinition