perl - 当某个模块的功能未知时,如何管理多个模块中的功能

标签 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;,我会得到在C:\_PROJECTS\1404134_abc\VULCAN\new.lava第12行,靠近“新三角测量”的运算符(operator)期望的位置找到Bareword (需要预先声明new吗?)

我得到的最接近的是 use Macro 'RunMenu'; 但随后我得到 Undefined subroutine &main::Triangulation Called at C:\_PROJECTS\1404134_abc\VULCAN\test4.lava第 45 行。

我相信正在发生的是Macro包含一个函数triangulation,它正在覆盖其他模块中的一个函数(不知道它在哪个模块中或如何找到出来,我尝试注释掉我加载的其他内容,并且在没有所有内容的情况下运行良好)。

当我不知道一个三角测量函数来自哪里时,关于如何使用这两个不同的三角测量函数,有什么建议吗?或者,如果有人可以提出任何其他修复建议,我们将不胜感激。

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

编辑:

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

最有用的部分在这里

三角测量类

三角测量对象提供了 Envisage 三角测量结构的接口(interface)。可以通过成员函数访问点和三角形数据。

每个三角形由 3 个顶点索引组成。这些是点数组的索引,该数组保存每个点的 3D 位置。三角形是使用三组 3D 点作为顶点形成的。

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

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

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

$结果= is_valid

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

$points = 积分

$points : The number of points in the triangulation

$三角形=三角形

$triangles : Number of triangles in the object

最佳答案

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

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

避免:

my $tr = new Triangulation($tri);
Triangulation "$basedir\\$tri"; 

关于perl - 当某个模块的功能未知时,如何管理多个模块中的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42169183/

相关文章:

regex - 是否存在包含转义序列的字符串的纯正则表达式拆分?

perl - perl 中的 Unicode,mkdir 练习

perl - 在 perl @ARGV 中查找管道和重定向

Perl 不在 crontab 中执行

perl - Perl 非面向对象的渗透测试

perl - 是否有搜索多余代码的模块?

perl - 将 CruiseControl 转换为 Hudson

javascript - 使用 Javascript 函数检索 Perl 哈希值

perl - 如何使用 Perl 递归复制目录的内容?

perl - VIM 9 Perl 文件的字边界更改