您所看到的不仅仅是一个子例程,而是一个名为$val 的对象 上的方法。
我认为您可能会在程序顶部看到如下内容:
use Foo::Bar; # Some Perl module
这个 Perl 模块将包含 方法 ReadSim。在您的代码中的某处,您可能会看到如下内容:
my $val = Foo::Bar->new; # If the people who wrote this followed standards...
这定义 $val 为Foo::Bar 的对象。如果您查看包Foo::Bar,您会看到如下内容:
#! Foo/Bar.pm
package Foo::Bar;
use strict; # Because I'm an optimist
use warnings;
...
sub new {
my $class = shift;
...
my $self = {};
...
bless $self, $class;
...
return $self; # May simply be bless {}, $class;
}
再往下看,你会看到:
sub ReadSim {
my $self = shift;
...
}
$self = {} 是对 Perl 哈希的引用。这就是大多数对象的定义方式。这几乎就是 constructor 所做的所有事情。它定义了对某事物的引用,然后祝福它为该对象类型。那么,方法只是获取已定义对象并对其进行操作的子例程。
$val-> ReadSim(...);
相当于:
Foo::Bar::ReadSim( $val, ... );
您对面向对象 Perl by Fire 的介绍就这么多。您仍然对ReadSim 的含义有疑问。
如果一切正常,该模块 的开发者应该已经创建了名为POD 的内置Perl 文档。首先确定$val是对象的类型。查看$val 的定义位置(类似于my $val = Foo::Bar->new(...);)。 Foo::Bar 是$val 所属的类。您可以从命令行执行此操作:
$ perldoc Foo::Bar
而且,如果幸运的话,您会看到打印出来的Foo::Bar 的文档。如果你真的非常幸运,你还会看到ReadSim 的作用。
而且,如果你不那么幸运,你将不得不进行一些挖掘。你可以这样做:
$ perldoc -l Foo::Bar
/usr/perl/lib/perl5/5.12/Foo/Bar.pm
这将打印出 Perl 模块 在您的系统上的位置。例如,在这种情况下,模块的代码在/usr/perl/lib/perl5/5.12/Foo/Bar.pm 中。现在,您可以使用此文件上的编辑器来阅读它,然后搜索 sub ReadSim 并找出那个 subroutine ...我的意思是方法的作用。
最后一件事。如果您是 Perl 新手,您可能想查看一些 Perl 附带的教程。一个是Perl Reference Tutorial。本教程将告诉您有关参考的信息。在标准 Perl 中,存在三种不同类型的变量:标量、散列和数组。要创建更复杂的数据结构,您可以创建哈希的哈希或数组的哈希,或数组的数组等。本教程将教您如何做到这一点。
一旦您了解了参考资料,您应该阅读Perl Object Oriented Programming 上的教程。面向对象 Perl 使用引用来创建一个模拟 世界的面向对象编程设计。 (我说 simulated 因为有些人会争辩说面向对象的 Perl 并不是真正的面向对象,因为你没有私有方法和变量之类的东西。对我来说,如果你能从对象的角度思考和编程时的方法,它是面向对象的)。