使用perl脚本可以使用多个辅助脚本中的一个

时间:2012-04-11 22:17:43

标签: perl include perl-module

我有一个主程序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的模块机制对此有些过分,但不知道替代方案是什么。

2 个答案:

答案 0 :(得分:2)

您可以根据需要使用哈希或数组来映射specialcase.pl个文件的值以及requiredo个值。

#!/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仅requireBEGIN块中的模块(并导入模块导出的项目)。由于您想要更改在运行时加载的脚本,请自行调用require

if ($special_case_1) {
  require 'special1.pl';
  # and go about your business
}

以下是关于何时使用userequire的{​​{3}}。