2012-04-11 67 views
3

我有一個主程序mytool.pl從命令行運行。有幾個輔助腳本special1.pl,special2.pl等,每個輔助腳本都包含一對子程序和一個散列,所有這些腳本的命名均相同。假設它們被命名爲MySpecialFunction(),AnotherSpecialFunction()和%SpecialData。讓一個perl腳本利用幾個輔助腳本之一

我希望mytool根據命令行選項包含/使用/導入其中一個特殊* .pl文件的內容,只有一個。例如,用戶會做什麼:

bash> perl mytool.pl --specialcase=5 

和銘佑會用MySpecialFunction()從special5.pl,而忽略其他特殊* .pl文件。

這是可能的和如何做到這一點?

需要注意的是,在運行時選擇使用哪個特殊文件,因此在mytool.pl的頂部添加「use」可能不是正確的選擇。

注意我是一個長期的C程序員,而不是perl專家;我可能會問一些明顯的問題。 這是一個只需一個月就會變成灰塵的一次性項目。在這個簡短的項目結束之後,mytool.pl和特殊的.pl(也不是perl自己)都不會感興趣。因此,我們不關心精心製作的解決方案或需要學習一些深奧的魔法。快速和骯髒的首選。我猜測Perl的模塊機制對此有點矯枉過正,但不知道替代方案是什麼。

回答

1

當你use模塊,Perl的只是require的在BEGIN塊模塊(和進口模塊導出的項目)。由於您想要更改在運行時加載的腳本,請自己撥打require

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

下面是關於何時使用userequire一個good reference

+0

關鍵的想法是使用'require'關鍵字。在http://www.snowfrog.n​​et/2009/05/09/perl-use-require-import上找到一個關於「使用」'需要''做'和'導入'(其中三個對我來說是新手)的備忘單這個答案在我腦海中回答了幾個模糊的問題。 – DarenW 2012-04-11 23:39:54

+0

@DarenW看看Perl中內置的Perl文檔。您可以使用'perldoc'程序來閱讀文檔。這一切都在[網頁](http://perldoc.perl.org)上。看看教程部分。 – 2012-04-12 04:58:29

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"; 
+0

將它們組合成一個文件對我們來說會適得其反。這些'特殊'文件包含很多我們不想看的特殊硬連線垃圾。 – DarenW 2012-04-11 23:38:26

+0

在這種情況下,在運行時「執行」相應的文件。文檔鏈接位於我答案的第一段。 – 2012-04-11 23:51:58

相關問題