0

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} ).2回目にプログラムを実行するときにすでに定義されている場合は、データベースから読み取って、もう一度同じものを再作成しないでください. しかし、$last_good{$name} = localtime;最初の割り当て後に印刷しようとすると、ログインは印刷localtimeされませんが、未定義であると表示されます。

4

1 に答える 1

0

dbmclose値を出力しようとする前に呼び出しているだけだと思います。もちろん、ハッシュはアンタイドです。

于 2012-11-06T12:13:15.200 に答える