让perl脚本使用几个辅助脚本中的一个
我有一个从命令行运行的主程序mytool.pl。有几个辅助脚本special1.pl、special2.pl等,每个脚本都包含一对子例程和一个散列,所有脚本的名称都相同。假设这些函数名为MySpecialFunction()、另一个SpecialFunction()和%SpecialData 我希望mytool根据命令行选项包含/使用/导入一个特殊的*.pl文件的内容,仅一个。例如,用户将执行以下操作:让perl脚本使用几个辅助脚本中的一个,perl,include,perl-module,Perl,Include,Perl Module,我有一个从命令行运行的主程序mytool.pl。有几个辅助脚本special1.pl、special2.pl等,每个脚本都包含一对子例程和一个散列,所有脚本的名称都相同。假设这些函数名为MySpecialFunction()、另一个SpecialFunction()和%SpecialData 我希望mytool根据命令行选项包含/使用/导入一个特殊的*.pl文件的内容,仅一个。例如,用户将执行以下操作: bash> perl mytool.pl --specialcase=5 myto
bash> perl mytool.pl --specialcase=5
mytools将使用special5.pl中的MySpecialFunction(),并忽略所有其他特殊的*.pl文件
这可能吗?如何做到
需要注意的是,选择要使用的特殊文件是在运行时进行的,因此在mytool.pl的顶部添加“use”可能不是正确的做法
注意我是一个长期的C程序员,不是perl专家;我可能在问一些显而易见的问题。
这是一个一次性的项目,将在一个月内变成尘埃。在这个简短的项目结束之后,mytool.pl和special?.pl(以及perl本身)都不会引起人们的兴趣。因此,我们不喜欢那些复杂的解决方案,也不需要学习一些深层的魔法。快脏的优先。我猜Perl的模块机制在这方面做得太过火了,但我不知道替代方案是什么。您可以使用哈希或数组将
specialcase
的值映射到.pl
文件,或者根据需要映射它们
#!/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";
当您
使用
模块时,Perl只需要求
将模块放在开始
块中(并导入模块导出的项)。由于要更改运行时加载的脚本,请自己调用require
if ($special_case_1) {
require 'special1.pl';
# and go about your business
}
这里有一个关于何时使用
use
vs.require
将它们合并到一个文件中会对我们产生反作用的问题。“特殊”文件包含许多我们不愿看到的特殊硬连线垃圾。在这种情况下,在运行时执行相应的文件。文档的链接在我回答的第一段。关键思想是使用“require”关键字。在“use”“require”“do”和“import”(其中三个对我来说是新的)上发现了一个备忘单,回答了我脑海中的几个模糊问题。@DarenW请看一下内置于Perl中的Perl文档。您可以使用perldoc
程序阅读文档。这也都是免费的。请看教程部分。