我有一个Perl程序,需要使用包(我也写).其中一些软件包仅在运行时选择(基于某些环境变量).当然,我不想在我的代码中为所有这些包添加"使用"行,但只有一个"使用"行,基于此变量,如下所示:
use $ENV{a};
Run Code Online (Sandbox Code Playgroud)
不幸的是,这当然不起作用.关于如何做到这一点的任何想法?
提前谢谢,奥伦
我需要在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 Monks 也有很好的答案:
但我想要一种强大的方法来向 Perl 应用程序添加功能,即:
为了说明这一点,以下是一些可以从良好解决方案中受益的示例:
一组从不同应用程序移动数据的脚本。例如,将数据从 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)