如何在一个未知的模块中管理多个模块中的功能

gtw*_*ebb 2 perl

我正在尝试编辑Lava中的脚本(Perl语言已经扩展用于挖掘软件Vulcan).

我遇到了模块的问题,因为我不习惯Perl,我无法完全解决它.

下面是一段代码

导致问题的模块是"宏".

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";
Run Code Online (Sandbox Code Playgroud)

如果我省略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调试工具.

编辑:

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

最有用的部分就在这里

三角测量类

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

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

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

$triangulation : Returned triangulation object.
$name          : Optional triangulation name.
Run Code Online (Sandbox Code Playgroud)

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

$ result = is_valid

$result : Whether a triangulation has been successfully loaded or set.
Run Code Online (Sandbox Code Playgroud)

$ points =积分

$points : The number of points in the triangulation
Run Code Online (Sandbox Code Playgroud)

$ triangles =三角形

$triangles : Number of triangles in the object
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 7

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

my $tr = 'Triangulation'->new($tri);
# or
my $tr = Triangulation::->new($tri);
Run Code Online (Sandbox Code Playgroud)

避免:

my $tr = new Triangulation($tri);
Triangulation "$basedir\\$tri"; 
Run Code Online (Sandbox Code Playgroud)

  • @gtwebb我想你忘记在问题中编辑代码了; 它仍然与原始版本相同.但无论如何,在获得答案后,​​你不应该明显改变问题.我会发一个新问题. (2认同)