正確なエラー:
$ ./script.pl file.txt
Can't open file.txt: No such file or directory at ./script.pl line 17.
Use of uninitialized value in chomp at ./script.pl line 17.
Username: Password:
コマンドラインからファイル名を取得し、その出力を書き込むスクリプトを作成しています。
#!/usr/bin/perl
use warnings;
use strict;
use Term::ReadKey;
my @array;
my $user;
my $pass;
# get login info
print "Username: ";
chomp($user = <>); # line 17
print "Password: ";
ReadMode 2;
chomp($pass = <>);
ReadMode 0;
print " \n";
# ...
# connect to database, and save the info in "@array"
# ...
# save the array to a file
if (defined($ARGV[0])) {
open (MYFILE, ">".$ARGV[0]) or die "Can't open ".$ARGV[0].": $!\n";
foreach (@array) {
print MYFILE $_."\n";
}
close (MYFILE);
# otherwise, print the names to the screen
} else {
foreach (@array) {
print $_."\n";
}
}
ただし、何かに置き換えるARGV[0]
と"file.txt"
、ファイルへの印刷は正常に機能します。ファイル名を指定しない場合、スクリプトは正常に機能します。私の推測では、print ステートメントが iostream バッファーに干渉しているのですが、それを修正する方法がわかりません。