我想寫一個腳本,我應該打開一個文件,可以是任何文件。從命令提示符輸入perl
但我想從命令提示符或其他方式傳遞文件的名稱,以便在輸入文件名更改時不必編輯腳本。
任何人都可以幫助我怎麼做?
open (DBC, "test.txt")|| die "cant open dbc $!";
@dbc = <DBC>;
close (DBC);
該文件是在我的腳本的目錄,這就是爲什麼我不給你想要使用的argv數組用於獲取,比如說,第一個參數這裏的任何路徑
我想寫一個腳本,我應該打開一個文件,可以是任何文件。從命令提示符輸入perl
但我想從命令提示符或其他方式傳遞文件的名稱,以便在輸入文件名更改時不必編輯腳本。
任何人都可以幫助我怎麼做?
open (DBC, "test.txt")|| die "cant open dbc $!";
@dbc = <DBC>;
close (DBC);
該文件是在我的腳本的目錄,這就是爲什麼我不給你想要使用的argv數組用於獲取,比如說,第一個參數這裏的任何路徑
:
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和類似的模塊。
閱讀perlop #I/O Operators
瞭解處理從命令行傳遞的文件的快捷方法。
的空文件句柄
<>
是特殊的:它可以用來模擬的行爲的sed和AWK,以及任何其他的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.
}
謝謝你的建議,我會去通過的Getopt ::龍再次感謝您的幫助 – Naidu
不客氣。如果你是新來者,你應該接受你所得到的最佳答案,並提供幫助你的最好答案。否則你會得到一個不好的聲譽,人們會停止回答你的問題:-) –
好吧,我是新來的,謝謝你通知我這個 – Naidu