通过一个 Perl 模块创建两个不同的对象
Creating two different objects through one Perl module
我正在编写允许用户创建 file
和 directory
对象来操作文件系统的 Perl 模块。
示例:
use File;
use Dir;
my $file = File->new("path");
my $dir = Dir ->new("path");
效果很好,但我真正希望能够同时创建 file
和 directory
对象,而不必 use
两个单独的模块。
为此,我提出了以下解决方案...
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");
现在问题来了,通过这样做,我消除了在用户创建 file
或 directory
对象时对 new
的显式调用。我有点使用 file
和 dir
子例程作为构造函数。
对我来说,这段代码看起来非常干净,而且使用起来非常简单,但我还没有看到很多其他人像这样编写 Perl 代码,所以我想我至少应该提出这个问题:
像这样简单地从子例程中 return 一个对象是否可以,或者这是否尖叫不好的做法?
完全没问题。
例如,Path::Class 的 file
和 dir
函数 return Path::Class::File 和 Path::Class::Dir 对象分别
如果那是 class 提供的唯一构造函数,它将阻止(干净)subclassing,但这里不是这种情况。
但是有一个问题是要不要更换
open(my $fh, "path");
opendir(my $dh, "path);
和
my $fh = file("path");
my $dh = dir("path);
是否有利(假设函数return IO::File和IO::Dir对象)。
我正在编写允许用户创建 file
和 directory
对象来操作文件系统的 Perl 模块。
示例:
use File;
use Dir;
my $file = File->new("path");
my $dir = Dir ->new("path");
效果很好,但我真正希望能够同时创建 file
和 directory
对象,而不必 use
两个单独的模块。
为此,我提出了以下解决方案...
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");
现在问题来了,通过这样做,我消除了在用户创建 file
或 directory
对象时对 new
的显式调用。我有点使用 file
和 dir
子例程作为构造函数。
对我来说,这段代码看起来非常干净,而且使用起来非常简单,但我还没有看到很多其他人像这样编写 Perl 代码,所以我想我至少应该提出这个问题:
像这样简单地从子例程中 return 一个对象是否可以,或者这是否尖叫不好的做法?
完全没问题。
例如,Path::Class 的 file
和 dir
函数 return Path::Class::File 和 Path::Class::Dir 对象分别
如果那是 class 提供的唯一构造函数,它将阻止(干净)subclassing,但这里不是这种情况。
但是有一个问题是要不要更换
open(my $fh, "path");
opendir(my $dh, "path);
和
my $fh = file("path");
my $dh = dir("path);
是否有利(假设函数return IO::File和IO::Dir对象)。