Perl子例程中的查询



我不得不在实习中使用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并不是真正面向对象的,因为你没有私有方法和变量。对我来说,如果你能在编程时从对象和方法的角度思考,那它就是面向对象的)。

最新更新