我不能做类似的事情
#! usr/bin/perl
use strict;
use warnings;
use Horse; #this is the package
my $test;
bless $test,Horse;
上面的代码是否实例$test
化为对 Horse 包的对象引用?或者 Perl 中的对象只是“已经有bless
语句”等待实例化的包?
另外,您能否提供对对象变量或方法或函数的示例访问?在 Perl 中叫什么?
bless
内置标记带有包名称的引用。然后使用该包来解析在对象上调用的方法。因此,即使没有明确的包,也可以这样做
my $obj = bless { x => 1}, 'Foo';
sub Foo::x {
my $self = shift;
return $self->{x};
}
print "1 == ", $obj->x, "\n";
请注意,您应该引用提供给bless
.
所以是的,您可以祝福对任何类的引用,包括导入的类。但请注意,这不会运行构造函数,并且会破坏“封装”,这是一种面向对象的原则,您应该只使用方法与类/与对象交互(例如new
类方法)。
每个全局变量都有一个完全限定名,由包名和变量名组成。子程序只是一种特殊的变量。例如,这个:
$Some::Package::var = 5;
sub Some::Package::give_var { return $Some::Package::var }
与
{
package Some::Package; # package declaration opens a new namespace
our $var = 5;
sub give_var { return $var }
}
因此,sub Foo::x {...}
声明一个x
在包中命名的子Foo
。