나는 사용자가 file
및 directory
객체를 만들어 파일 시스템을 조작 할 수있게 해주는 Perl 모듈을 작성하고 있습니다.하나의 Perl 모듈을 통해 두 개의 다른 객체 만들기
예 :이 좋게 작동하지만 내가 정말하고 싶은 것은 use
두 개의 별도의 모듈없이 모두 file
및 directory
객체를 생성 할 수
use File;
use Dir;
my $file = File->new("path");
my $dir = Dir ->new("path");
.
는
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
서브 루틴을 생성자로 사용하고 있습니다.
:
이 코드는 매우 깨끗보고, 사용하기 매우 간단하다 나에게,하지만이 같은 펄 코드를 작성하는 다른 많은 사람을 보지 못했어요 그래서 나는 적어도 문제를 제기해야한다 생각 이런 식으로 서브 루틴에서 객체를 반환하는 것은 괜찮습니까? 아니면이 비명을 나쁜 것으로 연습합니까?
나는 이것이 당신이 실제로 만든 것이 아니라 당신이 만든 예제라고 말할 것 같은 느낌이 들지 만 ... FYI, [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
굉장! 고마워요. 이거 야. – tjwrona1992