私は、ユーザがfile
オブジェクトとdirectory
オブジェクトを作成してファイルシステムを操作できるPerlモジュールを作成しています。1つのPerlモジュールで2つの異なるオブジェクトを作成する
例:
use File;
use Dir;
my $file = File->new("path");
my $dir = Dir ->new("path");
これがうまく出て動作しますが、私は本当にuse
二つの別々のモジュールにせずに両方file
とdirectory
オブジェクトを作成できるようにしたいと思いますどのような。私は、次の解決策を考え出した。これを行うために
...
IO.pm:
use File;
use Dir;
use Exporter qw(import);
our @EXPORT_OK = qw(file dir);
sub file {
my $path = shift;
return File->new($path);
}
sub dir {
my $path = shift;
return Dir->new($path);
}
1;
test.pl:
use IO qw(file dir);
my $file = file("path");
my $dir = dir ("path");
ここに問題があります。これを実行すると、ユーザーがまたはdirectory
オブジェクトを作成したときに、new
への明示的な呼び出しが削除されます。私はコンストラクタとしてfile
とdir
サブルーチンを使用しています。
私には、このコードは非常にきれいに見える、および使用が非常に簡単ですが、私はそう、私は、少なくとも疑問を提起する必要があります考え出し、このようにPerlコードを書いて、他の多くの人々を見ていない:
このようなサブルーチンからオブジェクトを単純に返すのは大丈夫ですか、それともこの悲鳴が悪いのですか?
これはあなたが実際に作ったものではなく、実際のものではないと言っている気がしますが、参考までに、[Path :: Tiny](https:// metacpan .org/pod/Path :: Tiny)はすでにファイルシステムとやり取りするためのかなり完全なOO APIを提供しています。 – ThisSuitIsBlackNot
(そしてPath :: Tinyの['path'](https://metacpan.org/pod/Path::Tiny#path)関数は' Path :: Tiny-> new'の文法的な砂糖ですので、あなたが記述したアプローチは悪い習慣ではありません。) – ThisSuitIsBlackNot
恐ろしい!ありがとう@ThisSuitIsBlackNot! – tjwrona1992