我遇到了使用以下语法的代码:
$a -> mysub($b);
在调查之后,我仍在努力弄清楚它意味着什么。任何帮助将不胜感激,谢谢!
答案 0 :(得分:4)
您遇到的是面向对象的perl。
它记录在perlobj
中。原理相当简单 - 对象是一种超级哈希,以及作为数据,也包含内置代码。
这样做的好处是,您的数据结构知道该怎么做'用它的内容。在基本级别,这只是验证数据 - 所以你可以制作一个拒绝"错误"输入
但它允许你做更复杂的事情。它的真正意义在于封装,这样我就可以编写一个模块,你可以利用它而不必关心它内部发生的事情 - 只有驱动它的机制。
所以一个非常基本的例子可能如下所示:
#!/usr/bin/env perl
use strict;
use warnings;
package MyObject;
#define new object
sub new {
my ($class) = @_;
my $self = {};
$self->{count} = 0;
bless( $self, $class );
return $self;
}
#method within the object
sub mysub {
my ( $self, $new_count ) = @_;
$self->{count} += $new_count;
print "Internal counter: ", $self->{count}, "\n";
}
package main;
#create a new instance of `MyObject`.
my $obj = MyObject->new();
#call the method,
$obj->mysub(10);
$obj->mysub(10);
我们定义" class"这是对象'如何工作的描述。在这个类中,我们设置了一个名为mysub
的子程序 - 但由于它是一个类,我们将其称为"方法" - 即特定绑定到对象的子例程。
我们创建一个对象的新实例(基本上与my %newhash
相同),然后调用其中的方法。如果创建多个对象,它们每个都拥有自己的内部状态,就像创建单独的哈希时一样。
另外:不要使用$a
和$b
作为变量名称。很脏。两者都是因为单个var名称错误,而且因为这两个特别是用于sort
。
答案 1 :(得分:3)