1

質問があります。モジュール 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);
}
4

3 に答える 3

8

3つのアプローチを考えることができます

  1. このSubroutine ... redefined at ...メッセージは単なる警告であり、エラーではありません。「彼らが何をしているかを知っている」場合はno warnings "redefine"、再定義の前に呼び出します。

  2. 池上が示唆するように、何もインポートしないでください。または、すべてをインポートしないでください。あなたは逃げることができます

    use File::Copy qw(move); # still import move, don't import copy

  3. 関数を再定義する前に、関数を明示的に未定義にします。コンパイル時にこれを行う必要があるため、これはBEGINブロックに属します。

    BEGIN { undef © }

    sub copy { ... # redefinition

于 2012-09-21T20:29:51.770 に答える
8
use File::Copy qw( );  # Don't import anything.
于 2012-09-21T20:24:53.873 に答える