我不得不在实习中使用perl,我遇到了这段代码,无法理解这可能意味着什么。
$val->ReadSim($first_sim, &DataProcessing);
在脚本中,定义了子程序DataProcessing,但找不到ReadSim。我试着在我们的基础设施中搜索,但没有成功。这是一周前给我的,我无法在不失去学分的情况下询问导游。。。
请帮忙。。。
您看到的不仅仅是一个子程序,而是一个名为$val
的对象上的method。
我想你可能会在程序顶部看到这样的东西:
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散列的引用。这就是大多数对象的定义方式。这几乎就是构造函数所做的全部工作。它定义了对某个对象的引用,然后将其祝福为该对象类型。然后,方法只是接受已定义对象并对其进行操作的子程序。
$val-> ReadSim(...);
相当于:
Foo::Bar::ReadSim( $val, ... );
以上就是您对Fire的面向对象Perl的介绍。你仍然有一个问题,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
,找出子程序是什么。。。我的意思是方法确实如此。
最后一件事。如果您是Perl的新手,您可能想看看Perl附带的一些教程。一个是Perl参考教程。本教程将向您介绍参考资料。在标准Perl中,有三种不同类型的变量:标量、散列和数组。要创建更复杂的数据结构,您可以创建散列的散列或数组的散列,或数组的数组等。本教程将教您如何做到这一点。
一旦理解了参考文献,就应该阅读Perl面向对象编程教程。面向对象Perl使用引用来创建模拟的世界面向对象编程设计。(我说模拟是因为有些人会说面向对象的Perl并不是真正面向对象的,因为你没有私有方法和变量。对我来说,如果你能在编程时从对象和方法的角度思考,那它就是面向对象的)。