我有一个要从命令行运行的主程序 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 和 special?.pl(也不是 perl 本身)在这个简短的项目结束后都不会引起人们的兴趣。因此,我们不关心复杂的或需要学习一些深奥魔法的解决方案。快速和肮脏的首选。我猜 Perl 的模块机制对此有点矫枉过正,但不知道有什么替代方案。
最佳答案
您可以使用散列或数组将 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";
关于perl - 让 perl 脚本使用多个辅助脚本中的一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10114775/