我编写了一个代码,它尝试使用 perl 脚本存储用户的最后登录时间,并使用 dbmopen 将其存储在哈希中,但它没有获取更新的登录时间:- 我的代码如下:-
#!/usr/bin/perl -w
use DB_File;
use Time::localtime;
%last_good =();
%words = () ;
init_words();
print " What is your name ? \n";
$name=<STDIN>;
chomp($name);
print "Hi $name , please Enter your secret password: \n" ;
$passwd = <STDIN>;
chomp($passwd);
$i=1;
while(! good_password($name,$passwd))
{
print " Wrong Password , Please Try Again : \n";
$passwd=<STDIN>;
chomp($passwd);
}
print "assigning the last login time \n ";
dbmopen (%last_good,"lastdb",0777) || die "can't dbmopen lastdb: $!";
$last_good{$name} = localtime; // update last login time if password correct
dbmclose (%last_good) || die "can't dbmclose lastdb: $!";
print "the last login time for : $name is $last_good{$name} ";
sub init_words
{
open(WORDLIST,"password.txt") || die " Can not Read the password.txt : $! \n";
while(defined ($name = <WORDLIST>))
{
chomp($name);
$name =~ s/\W.*// ;
$name =~ tr /A-Z/a-z/ ;
$password=<WORDLIST>;
chomp($password);
$words{$name}=$password;
if(! defined $last_good{$name} )
{
dbmopen (%last_good,"lastdb",0777) || die "can't dbmopen lastdb: $!";
$last_good{$name} = localtime; // update login time for 1st login
dbmclose (%last_good) || die "can't dbmclose lastdb: $!";
}
write;
}
close(WORDLIST) || die " Could not close the file : $! \n ";
}
我要做的是更新或将第一次登录时间放入数据库,如果它不是他们的使用if(! defined $last_good{$name} )
,然后如果它已经定义,当我第二次运行编时我希望它从数据库中读取,而不是尝试再次创建相同的. 但是当我$last_good{$name} = localtime;
在第一次分配后尝试打印时,它不会打印登录名localtime
,但它说它是未定义的。