>>356
>while文内のif文を、$dbh -> disconnect;文以下にもってくると
の意味がよくわからんのだが、

$dbh -> disconnect;
while ($i = $pre -> fetchrow_array) {
print "データベースに保管してあるパスワード\t$i\n";
if ((crypt ($pwd, $i)) eq $i) { print "OK\n"; } else { print "NG\n"; }
}
→ $dbhをdisconnectした後にfetchrow_arrayを呼んでも無効

while ($i = $pre -> fetchrow_array) {
print "データベースに保管してあるパスワード\t$i\n";
}
if ((crypt ($pwd, $i)) eq $i) { print "OK\n"; } else { print "NG\n"; }
$dbh -> disconnect;
→whileを抜けた後は$iがundefになっているので比較しても意味なし

のいずれかでは?