我遇到了這種情況,我需要從名爲login.txt的文件(在當前目錄中)讀取2行數據(用戶名和密碼) )。讀取用戶名(第一行)後必須存儲在$ user中,第二行(密碼)必須存儲在$ pass中。從文件中讀取數據並創建文件並寫入數據是找不到文件
如果找不到這個文件,我必須提示用戶輸入用戶名和密碼並將其存儲在$ user和$ pass中,並創建文件login.txt(在currect dir中)並將這兩個文件寫入行到文件中。
my $user;
my $pass;
my $login = "login.txt";
unless (-e $login) {
print "Entering first time execution mode....!\n";
sleep(2);
print "Enter username:\n";
$user = <STDIN>;
chomp($user);
print "Enter password:\n";
$pass = <STDIN>;
chomp($pass);
unless(open LINFO, '>'.$login) {
# Die with error message
# if we can't open it.
die "\nUnable to create $login\n";
}
print LINFO "$user\n";
print LINFO "$pass\n";
close LINFO;
}
if (-e $login) {
open (LINFO, '$login') or die "Cant open\n";
while(my $line = <LINFO>) {
print $line;
chomp($line);
if ($. == 1) { $user = $line; }
elsif ($. == 2) { $pass = $line; }
last if $. == 2;
}
close LINFO;
}
print $pass;
print $user;
當文件不存在,一切工作正常(甚至$用戶和$通過獲取打印),但將如下得到一個錯誤信息: -
readline() on closed filehandle LINFO at loginfile.pl line 43.
若已文件存在,那麼我獲得以下錯誤
readline() on closed filehandle LINFO at loginfile.pl line 43.
Use of uninitialized value $pass in print at loginfile.pl line 59.
Use of uninitialized value $user in print at loginfile.pl line 60.
不知道什麼這裏的問題
我工作的答案是,儘管腳本起作用,但我正面臨一個小錯誤。請檢查已編輯的問題 – mac
@mac唯一的致命錯誤是,當您打開文件'open LINFO',$ login''時,您在文件名周圍使用單引號。該語句應該會導致腳本死掉,因爲單引號會阻止變量插值,並且腳本會嘗試打開名爲'$ login'的文件(該文件不應該存在)。由於它不會死亡,因此與您報告的錯誤不符。你的錯誤表明開放失敗,但腳本沒有死。所以,我的猜測是你做了和你說的不同的事情。 – TLP
要解決插值問題,請刪除引號。你永遠不需要引用一個變量,只需要字符串。 – TLP