2014-04-08 143 views
1

我想寫一個腳本,我應該打開一個文件,可以是任何文件。從命令提示符輸入perl

但我想從命令提示符或其他方式傳遞文件的名稱,以便在輸入文件名更改時不必編輯腳本。

任何人都可以幫助我怎麼做?

 open (DBC, "test.txt")|| die "cant open dbc $!"; 
     @dbc = <DBC>; 
     close (DBC); 

該文件是在我的腳本的目錄,這就是爲什麼我不給你想要使用的argv數組用於獲取,比如說,第一個參數這裏的任何路徑

回答

2

my $file = $ARGV[0]; 
open (DBC, $file)|| die "cant open dbc $!"; 
@dbc = <DBC>; 
close (DBC); 

有很多更好的辦法,最終做這樣的事情,如檢查,以確保他們經過一些第一:

if ($#ARGV == -1) { 
    die "You need to supply a file name to the command"; 
} 

my $file = $ARGV[0]; 
open (DBC, $file)|| die "cant open dbc $!"; 
@dbc = <DBC>; 
close (DBC); 

你可以從那裏繼續,最終了解Getopt::Long和類似的模塊。

+0

謝謝你的建議,我會去通過的Getopt ::龍再次感謝您的幫助 – Naidu

+0

不客氣。如果你是新來者,你應該接受你所得到的最佳答案,並提供幫助你的最好答案。否則你會得到一個不好的聲譽,人們會停止回答你的問題:-) –

+0

好吧,我是新來的,謝謝你通知我這個 – Naidu

0

閱讀perlop #I/O Operators瞭解處理從命令行傳遞的文件的快捷方法。

的空文件句柄<>是特殊的:它可以用來模擬的行爲的sedAWK,以及任何其他的Unix過濾程序,它的文件名列表從關聯的文檔簡要引述,對所有人的每一行輸入都做同樣的事情。來自<>的輸入來自標準輸入,或來自命令行上列出的每個文件。以下是它的工作原理:第一次對<>進行評估時,將檢查@ARGV陣列,如果它是空的,則將$ARGV[0]設置爲"-",打開時會爲您提供標準輸入。然後將@ARGV數組作爲文件名列表進行處理。

基本上,可以簡化您的腳本緊接在以下幾點:

use strict; 
use warnings; 

die "$0: No filename specified\n" if @ARGV != 1; 

while (<>) { 
    # Process your file line by line. 

}