如何在一个未知的模块中管理多个模块中的函数

时间:2017-02-10 21:45:31

标签: perl

我试图用Lava编辑脚本(Perl语言已经扩展用于挖掘软件Vulcan)。

我遇到了模块的问题,因为我不熟悉Perl,我还没有完全解决它。

代码片段在

之下

导致问题的模块是" Macro"。

use Lava;
use warnings;
use strict;
use vulcan;
use utf8;
use Macro 'RunMenu';
use File::Basename;

my $tri = 'C:\\_PROJECTS\\1404134_abc\\VULCAN\\faults.tri\\retriangulated\\gbc_ne1e_1606.00t';
my $tr = new Triangulation($tri);

#Runs fine
RunMenu("TRI_UTE_LOAD:$tri","abort",
      "FINISH") || die "Macro mismatch.\n";

#Does not run fine
RunMenu("TRI_EDIT_INTERP","abort",
      sub { Triangulation("$basedir\\$tri"); },

      sub { PanelResults("Select interpolation option",
                "line" => "",
                "Maximum triangle area  " => "$maxTriArea",
                "Maximum boundary length" => "100.0",
                "button_pressed" => "ok",
                "Interpolate midpoints" => "1",
                "Interpolate centroids" => "0",
                "Honour breaklines" => "1"
                   ); },
      "FINISH") || die "Macro mismatch.\n";

如果我省略use Macro;此行my $tr = new Triangulation($tri);运行正常,但我无法使用RunMenu命令。

如果我加use Macro;,我会Bareword found where operator expected at C:\_PROJECTS\1404134_abc\VULCAN\new.lava line 12, near "new Triangulation" (Do you need to predeclare new?)

我最接近的是use Macro 'RunMenu';,但后来我Undefined subroutine &main::Triangulation called at C:\_PROJECTS\1404134_abc\VULCAN\test4.lava line 45.

我认为发生的事情是Macro包含一个函数triangulation,它会在其他模块中覆盖一个函数(不知道它在哪个模块或如何查找,我尝试过注释掉我加载的其他内容并且没有所有内容都运行正常。)

当我不知道来自哪里时,有关如何使用两种不同的三角测量功能的任何建议?或者,如果任何人都可以建议任何其他修复,将非常感谢。

代码正在通过Vulcan运行,因此我不确定我可以使用哪些Perl调试工具。

编辑:

如果您感兴趣,我已经复制了下面的帮助文件 Help file

最有用的部分是

三角测量类

Triangulation对象为Envisage三角测量结构提供了一个接口。可以通过成员函数访问点和三角形数据。

每个三角形由3个顶点索引组成。这些是点阵列的索引,它保存每个点的3D位置。通过使用三组3D点作为顶点来形成三角形。

方法: $ triangulation = new Triangulation($ name)

$triangulation : Returned triangulation object.
$name          : Optional triangulation name.

构造函数返回一个新的三角测量对象。如果提供了名称,则加载给定名称的三角测量。

$ result = is_valid

$result : Whether a triangulation has been successfully loaded or set.

$ points = points

$points : The number of points in the triangulation

$ triangles = triangles

$triangles : Number of triangles in the object

1 个答案:

答案 0 :(得分:7)

似乎Triangulation是一个类和函数名称。 Perl不知道你想使用哪一个,但你可以在函数调用后使用括号来帮助它,你也应该避免使用方法的“间接对象”语法,并可能引用类名或附加::来它们:

my $tr = 'Triangulation'->new($tri);
# or
my $tr = Triangulation::->new($tri);

忌:

my $tr = new Triangulation($tri);
Triangulation "$basedir\\$tri"; 
相关问题