标题含糊不清,但我会解释它。
我有一个Perl脚本,它使用名为systemId
我在脚本
中创建了一个对象my $id = systemId->new({_dom => "dev"});
我打算实例化一个类似于上面的对象但在systemId.pm内的对象。
我该怎么做?
我无法在网上搜索,因为我不知道要搜索什么。
答案 0 :(得分:4)
您可以像在脚本中一样执行此操作。与将包和main::
放在同一文件中的方式类似,一旦定义了包,就可以在包文件中使用该类。请在代码后查看评论。
File Play.pm
package Play;
use warnings;
use strict;
sub new {
my $class = shift;
my $self = { _data => shift || 'default' };
bless $self, $class;
print "New object created.\n";
return $self;
}
sub data {
my $self = shift;
if (@_) { $self->{_data} = shift }
return $self->{_data};
}
print "Inside the package. Create object.\n";
my $obj = Play->new();
my $data = $obj->data();
print "data: $data\n";
print "\n";
1;
脚本
use warnings;
use strict;
use Play;
print "In main\n";
my $obj = Play->new(25);
print "data: " . $obj->data() . "\n";
运行脚本时的打印输出
Inside the package. Create object. New object created. data: default In main New object created. data: 25
bless
执行的调用$self
是类Play
的对象。来自bless
祝福REF,CLASSNAME
祝福REF
这个函数告诉REF引用的东西它现在是CLASSNAME包中的一个对象。如果省略CLASSNAME,则使用当前包。 [...]
由于我们在包中是正确的,因此它可以用作对象和调用它的方法。来自perlobj
一旦我们祝福了$ self引用的哈希,我们就可以开始调用它了。
这指的是使用$self
hashref。
请注意,在创建对象时,它们可能是初始化问题,以及正在做什么以及可能重要的问题。
我无法帮助,但问,你想用这个做什么?
答案 1 :(得分:3)
一样简单:
my $id = systemId->new({_dom => "dev"});
您也可以使用......
my $id = __PACKAGE__->new({_dom => "dev"});
......但第一个更明显。
可以在任何地方创建一个新的对象实例,包括包/类本身。
->new
函数通常是:
sub new {
my $class = shift;
my $self = bless {@_}, $class;
return $self;
}
实例实际上是在类模块本身中创建的(使用bless
)。 Perl中的->new
没有魔法,有些模块也使用其他名称,请参阅内部->now
的{{3}} ->new(epoch => time)
。