Perl取消对子例程的引用
我遇到过具有以下语法的代码:Perl取消对子例程的引用,perl,reference,subroutine,Perl,Reference,Subroutine,我遇到过具有以下语法的代码: $a -> mysub($b); 在调查之后,我仍在努力弄清楚它的含义。任何帮助都将不胜感激,谢谢 这是一个电话$a是发票(类名或对象),mysub是方法名,$b是参数。您应该继续阅读解释所有这些的内容。您遇到的是面向对象的perl 它记录在。但原理相当简单——对象是一种超级哈希,它与数据一样,还包括内置代码 这样做的好处是,您的数据结构“知道如何处理”其内容。在一个基本的层次上,这只是验证数据,所以您可以创建一个拒绝“不正确”输入的散列 但它允许你做相当复
$a -> mysub($b);
在调查之后,我仍在努力弄清楚它的含义。任何帮助都将不胜感激,谢谢 这是一个电话
$a
是发票(类名或对象),mysub
是方法名,$b
是参数。您应该继续阅读解释所有这些的内容。您遇到的是面向对象的perl
它记录在。但原理相当简单——对象是一种超级哈希,它与数据一样,还包括内置代码
这样做的好处是,您的数据结构“知道如何处理”其内容。在一个基本的层次上,这只是验证数据,所以您可以创建一个拒绝“不正确”输入的散列
但它允许你做相当复杂的事情。它的真正意义在于封装,这样我就可以编写一个模块,并且您可以使用它,而不必真正关心它内部发生了什么,只需要关心驱动它的机制
因此,一个非常基本的示例可能如下所示:
#!/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);
我们定义了“类”,它描述了对象如何“工作”。在这个类中,我们设置了一个名为mysub
的子例程,但因为它是一个类,所以我们将它称为“方法”——也就是说,一个专门绑定到对象的子例程
我们创建一个对象的新实例(基本上与my%newhash
相同),然后调用其中的方法。如果创建多个对象,每个对象都有自己的内部状态,这与创建单独的散列时相同
另外:不要使用
$a
和$b
作为变量名。它很脏。这两个原因都是因为单个变量名是错误的,还因为这两个变量特别用于排序
第二段和第三段完全错了(其余部分只是重复了perlootut)。对象不必是散列。方法不在散列中;它们甚至不与对象(如JS)关联,而是与类关联。验证可以在没有OOP的情况下轻松完成。perlootut是比perlobj更好的参考。