Ich schreibe Perl-Module, mit denen Benutzer file
und directory
Objekte erstellen können, um das Dateisystem zu bearbeiten.Erstellen von zwei verschiedenen Objekten durch ein Perl-Modul
Beispiel:
use File;
use Dir;
my $file = File->new("path");
my $dir = Dir ->new("path");
Dies funktioniert gut, aber was ich wirklich in der Lage sein mag beide file
und directory
Objekte zu erstellen, ohne zu use
zwei separaten Modulen.
Um dies zu tun, ich mit der folgenden Lösung ...
IO.pm kam:
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");
Jetzt ist hier das Problem, indem ich den expliziten Aufruf von new
, wenn der Benutzer ein Objekt file
oder directory
erstellt, dadurch eliminiere. Ich verwende die Unterprogramme file
und dir
als Konstruktoren.
Für mich dieser Code sehr sauber aussieht, und ist extrem einfach zu bedienen, aber ich habe nicht viele andere Leute zu schreiben Perl Code wie diesen so dachte ich, ich sollte zumindest die Frage stellen gesehen:
Ist es in Ordnung, ein Objekt aus einer solchen Subroutine einfach zurückzugeben, oder schreit dies schlecht?
Ich habe das Gefühl, dass Sie sagen werden, dass dies nur ein Beispiel ist, das Sie erfunden haben und nicht das, woran Sie gerade arbeiten, aber ... FYI, [Path :: Tiny] (https: // metacpan .org/pod/Path :: Tiny) gibt bereits eine ziemlich vollständige OO-API für die Interaktion mit dem Dateisystem. – ThisSuitIsBlackNot
(Und Path :: Tiny's ['path'] (https://metacpan.org/pod/Path::Tiny#path) Funktion ist nur syntaktische Zucker für' Path :: Tiny-> new', also nein, die Ansatz, den Sie beschrieben haben, ist keine schlechte Praxis.) – ThisSuitIsBlackNot
Awesome! Danke @ThisSuitIsBlackNot! – tjwrona1992