2012-07-10 51 views
2

我有一個程序,我需要將文件名(和位置)傳遞給程序。我怎樣才能做到這一點?我已閱讀GetOpt文檔,請不要指向我。我的命令行如下所示:如何使用GetOpt傳遞文件

perl myprogram.pl -input C:\inputfilelocation -output C:\outputfilelocation 

我GetOptions看起來像這樣:

GetOptions( '輸入= S'=> \ $輸入, '輸出= S'=> \ $輸出) ;

基本上我需要弄清楚如何訪問該文件在一個while循環,我有在文件中的線,迭代,並把每個到$ _

while ($input) { 

...沒有按」工作。請注意,在我的文件正常工作之前:

open my $error_fh, '<', 'error_log'; 
while (<$error_fh>) { 

回答

4

這適用於我。你的GetOptions似乎是正確的。打開文件,並從文件句柄讀取,並且不要忘記檢查錯誤:

use warnings; 
use strict; 
use Getopt::Long; 

my ($input, $output); 
GetOptions('input=s' => \$input,'output=s' => \$output) or die; 

open my $fh, '<', $input or die; 

while (<$fh>) { 
    ## Process file. 
} 
+0

礦去世,享年:打開我的$跳頻, '<',$輸入或死亡;有什麼建議麼? – rupes0610 2012-07-10 22:59:12

+0

@ user1488984爲什麼它會死?在錯誤信息中包含錯誤:'...或者死亡$!'。 – TLP 2012-07-10 23:17:50

+0

@TLP:它在關閉的文件句柄$ fh上寫着「readline():while(<$fh>){ – rupes0610 2012-07-10 23:47:35

2

你的代碼似乎假設您正在傳遞的文件句柄,而不是文件名。您需要打開文件併爲其分配文件句柄。

# This doesn't work as $input contains a file name 
GetOptions('input=s' => \$input,'output=s' => \$output); 

# This doesn't work for two reasons: 
# 1/ $input is a file name, not a filehandle 
# 2/ You've omitted the file input operator 
while ($input) { 
    ... 
} 

你想要更多的東西是這樣的:

# Get the file names 
GetOptions('input=s' => \$input,'output=s' => \$output); 

# Open filehandles 
open my $in_fh, '<', $input or die "Can't open $input: $!"; 
open my $out_fh, '>', $output or die "Can't open $output: $!"; 

# Read the input file using a) the input filehandle and b) the file input operator 
while (<$in_fh>) { 
    ... 
} 

我也覺得可能是這裏的另一個問題。我不是Windows的專家,但我認爲你的文件名可能會被誤解。嘗試要麼扭轉在命令行上的斜線:

perl myprogram.pl -input C:/inputfilelocation -output C:/outputfilelocation 

或反斜槓加倍:

perl myprogram.pl -input C:\\inputfilelocation -output C:\\outputfilelocation 

或者是引用的論據:

perl myprogram.pl -input "C:\inputfilelocation" -output "C:\outputfilelocation" 
相關問題