2

プログラムにファイル名(および場所)を渡す必要があるプログラムがあります。これどうやってするの?GetOptのドキュメントを読んだので、そこを指さないでください。私のコマンドラインは次のとおりです。

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

私のGetOptionsは次のようになります。

GetOptions('input = s'=> \ $ input、'output = s'=> \ $ output);

基本的に、ファイル内の行を繰り返してそれぞれを$ _に入れる、whileループでそのファイルにアクセスする方法を理解する必要があります。

while ($input) {

...動作しません。私のファイルがうまく機能する前に、次のことに注意してください。

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

2 に答える 2

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.
}
于 2012-07-10T22:22:22.993 に答える
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

またはバックスラッシュを2倍にする:

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

またはおそらく引数を引用します:

perl myprogram.pl -input "C:\inputfilelocation" -output "C:\outputfilelocation"
于 2012-07-11T09:11:13.047 に答える