あなたのコードは、ファイル名ではなく、ファイルハンドルが渡されていることを前提としているようです。ファイルを開いて、ファイルハンドルを割り当てる必要があります。
# 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"