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更好的参考。