如何在perl中编写重写导入函数的模块函数
我有一个问题:我想为我的模块M编写一个名为“copy”的方法。这个函数是导入的函数File::copy::copy的包装器。所以我必须使用File::Copy::Copy并定义我自己的副本。但它会有一个错误,说复制被重新定义。如何实现我的目标如何在perl中编写重写导入函数的模块函数,perl,Perl,我有一个问题:我想为我的模块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; Fil
#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);
}
我可以想出三种方法
子例程。。。在…
处重新定义的消息只是一个警告,而不是错误。如果您“知道他们在做什么”,请在重新定义之前调用无警告“重新定义”
使用文件::复制qw(移动);#仍然导入移动,不导入副本
BEGIN
块:
开始{
未定义&复制;
}
子副本{…#重新定义
我可以想出三种方法
子例程…在…
处重新定义的消息只是一个警告,而不是错误。如果您“知道他们在做什么”,请在重新定义之前调用无警告“重新定义”
使用文件::复制qw(移动);#仍然导入移动,不导入复制
BEGIN
块:
开始{
未定义&复制;
}
子副本{…#重新定义
通过在导出列表中为标识符加上!前缀,可以取消导出该标识符 在下面的示例中,调用了
move
和copy
。move
会产生一个错误,因为它找不到指定的文件。copy
被我们对copy
的定义所取代。如果删除该行,则调用copy
将导致未定义的函数
% perl <<'EOF'
use File::Copy qw(!copy);
sub copy { print "Hello world!\n" };
move("a", "b") or print "$!\n";
copy("a", "b") or print "$!\n";
EOF
No such file or directory
Hello world!
%perl通过在导出列表中以!作为标识符的前缀,可以取消导出它
在下面的示例中,调用了move
和copy
。move
会产生一个错误,因为它找不到指定的文件。copy
被我们对copy
的定义所取代。如果删除该行,则调用copy
将导致未定义的函数
% perl <<'EOF'
use File::Copy qw(!copy);
sub copy { print "Hello world!\n" };
move("a", "b") or print "$!\n";
copy("a", "b") or print "$!\n";
EOF
No such file or directory
Hello world!
%perl为什么不使用其他名称?mycopy
?perl不关心您使用的名称。因为某些要求。必须使用相同的名称。为什么不使用其他名称?mycopy
?perl不关心您使用的名称。因为某些要求。必须使用相同的名称。