相关疑难解决方法(0)

如何使用仅在运行时知道的Perl包?

我有一个Perl程序,需要使用包(我也写).其中一些软件包仅在运行时选择(基于某些环境变量).当然,我不想在我的代码中为所有这些包添加"使用"行,但只有一个"使用"行,基于此变量,如下所示:

use $ENV{a};
Run Code Online (Sandbox Code Playgroud)

不幸的是,这当然不起作用.关于如何做到这一点的任何想法?

提前谢谢,奥伦

perl packages runtime require

16
推荐指数
3
解决办法
5281
查看次数

如何在Perl中将变量用作变量名?

我需要在perl中实现以下功能

printmsg(@val1, $msg1) if @val1;
printmsg(@val2, $msg2) if @val2;
printmsg(@val3, $msg3) if @val3;
printmsg(@val4, $msg4) if @val4;
printmsg(@val5, $msg5) if @val5;
printmsg(@val6, $msg6) if @val6;
Run Code Online (Sandbox Code Playgroud)

所以我写了下面的代码片段

for(my $i=1; $i < 6; $i++ ) {
    printmsg(@val$i, $msg$i) if @val$i;
}
Run Code Online (Sandbox Code Playgroud)

它不起作用并且会出错.

perl symbolic-references

13
推荐指数
2
解决办法
5576
查看次数

将动态代码添加到 Perl 应用程序的最佳方法

我知道这个问题的具体实例之前已经得到回答:

Perl Monks 也有很好的答案:

但我想要一种强大的方法来向 Perl 应用程序添加功能,即:

  1. 高效:如果代码不需要,则不应编译。
  2. 易于调试:如果动态代码出现问题,则错误报告应该指向动态代码的正确位置。
  3. 易于扩展:添加新代码应该像添加新文件或目录+文件一样简单。
  4. 易于调用:主应用程序应该能够轻松使用“附加组件”。一个有效的机制来检查“附加”是否已经加载,如果没有加载,将是一个优点。

为了说明这一点,以下是一些可以从良好解决方案中受益的示例:

  • 一组从不同应用程序移动数据的脚本。例如,将数据从 OpenCart 移动到 Prestashop,其中数据模型中的每个实体都有一个处理输入或输出的特定“附加组件”;然后中间数据模型负责数据的转换。这可用于在任何方向甚至同一电子商务的不同版本之间移动数据。

  • 需要在不同位置呈现不同类型 HTML 的 Web 应用程序。每个“模块”都知道如何处理特定信息并接受参数来执行此操作。一个模块输出 HTML,另一个模块输出文档列表,另一个模块输出文档,另一个模块输出横幅,等等。

以下是我使用过并且有效的一些示例。

在运行时加载函数并输出可能的编译错误:

eval `cat $file_with_function`;
if( $@ ) {
  print STDERR $@, "\n";
  die "Errors at file $file_with_function\n";
}
Run Code Online (Sandbox Code Playgroud)

或者使用更强大的File::Slurp

eval read_file("$file_with_function", binmode => ':utf8');
Run Code Online (Sandbox Code Playgroud)

检查某个函数是否已定义:

if( !defined &myfunction ) {
  die "myfunction is not defined\n";
} …
Run Code Online (Sandbox Code Playgroud)

perl

5
推荐指数
1
解决办法
1393
查看次数

标签 统计

perl ×3

packages ×1

require ×1

runtime ×1

symbolic-references ×1