2016-01-27 188 views
2

我正在編寫一個龐大的Perl腳本,它需要使用其他現有的Perl腳本。問題是主腳本需要引用來自不同文件夾的許多不同腳本。例如主腳本將被包含在:如何讓perl腳本運行另一個perl腳本?

/perl/programs/io 

它可能需要運行存儲在一個腳本:

/perl/programs/tools 

注意,還有除了工具等正交文件夾,這樣我需要能夠隨時訪問他們中的任何一個。

目前,這是我得到:

my $mynumber = '../tools/convert.pl bin2dec 1011'; 

從理論上講,當通過它的參數,它應該回到從IO目錄移動然後輸入相應的工具目錄,並調用convert.pl腳本。

所有這些都將字符串存儲在單引號中,以$myNumber

+5

呃......你只是給一個變量賦值一個字符串。也許你打算使用[反推](http://perldoc.perl.org/perlop.html#%60_STRING_%60)? –

+3

[如何在Perl腳本中運行Perl腳本?](http://stackoverflow.com/questions/364842/how-do-i-run-a-perl-script-from-within-一個perl腳本) –

+0

@MattJacob是的,但接受的答案有點矯枉過正這種情況。 – simbabque

回答

1

要運行任何操作系統命令或腳本所有你需要做的就是使用`一段單列。通過觀察另一個程序員的Perl代碼,我誤讀了這些奇怪的引號以用於'單引號'。

反引號也很好,因爲它們將STDOUT中的文本返回給你的perl腳本,這樣輸出可以分配給一個變量,如果使用system(「」),我發現它是不可能的。

1

類似的問題答案不適用於我的Perl版本。該行

use IPC::System::Simple qw(system capture); 

會引發一些錯誤。然而僅僅使用系統的工作原理,這樣的:

my $mynumber = system($^X, "../tools/convert.pl", 'bin2dec', '1011'); 

我可以用上面沒有設置等於什麼來執行它沒有返回值,並只發送參數的腳本。

這似乎是最簡單的方法來做我所需要的,整個程序文件夾可以移動到任何地方,它仍然會工作,因爲沒有上面的程序使用父目錄。

1

我喜歡將一個命令的輸出分配給一個數組,以便我可以遍歷該數組來查找錯誤或其他消息。例如,如果我正在製作一個zip文件以通過電子郵件發送給某人,我想在繼續製作和發送電子郵件之前查看該zip文件是否有任何錯誤。

@msgs = `zip -f myfile.zip *.pl`; # Use backticks 

您也可以將輸出到一個標量:

$msg = `ls -al *.pl`; # Use backticks 
相關問題