我有一个主程序mytool.pl从命令行运行。有几个辅助脚本special1.pl,special2.pl等,每个脚本都包含几个子程序和一个哈希,所有脚本都在脚本中相同。我们假设它们被命名为MySpecialFunction(),AnotherSpecialFunction()和%SpecialData。
我希望mytool根据命令行选项包含/使用/导入其中一个特殊* .pl文件的内容,只有一个。例如,用户将执行:
bash> perl mytool.pl --specialcase=5
和mytools将使用special5.pl中的MySpecialFunction(),并忽略所有其他特殊的* .pl文件。
这可能吗?怎么办?
重要的是要注意选择使用哪个特殊文件是在运行时进行的,因此在mytool.pl顶部添加“use”可能不是正确的做法。
注意我是一名长期的C程序员,而不是perl专家;我可能会问一些明显的事情。 这是一个一次性的项目,将在一个月内变成灰尘。在这个简短的项目结束之后,mytool.pl和特殊的.pl(也不是perl本身)都不会引起人们的兴趣。因此,我们不关心精心设计或需要学习一些深刻魔法的解决方案。快速和肮脏的首选。我猜测Perl的模块机制对此有些过分,但不知道替代方案是什么。
答案 0 :(得分:2)
您可以根据需要使用哈希或数组来映射specialcase
到.pl
个文件的值以及require或do个值。
#!/usr/bin/env perl
use strict; use warnings;
my @handlers = qw(one.pl two.pl);
my ($case) = @ARGV;
$case = 0 unless defined $case;
# check that $case is within range
do $handlers[$case];
print special_function(), "\n";
答案 1 :(得分:1)
当你use
一个模块时,Perl仅require
是BEGIN
块中的模块(并导入模块导出的项目)。由于您想要更改在运行时加载的脚本,请自行调用require
。
if ($special_case_1) {
require 'special1.pl';
# and go about your business
}
以下是关于何时使用use
与require
的{{3}}。