Образец задания к уроку 2

#!/usr/bin/perl
%account = qw(
vova 123
vasya 456
admin admin
);
$account{'guest'} ='';
open (VISITLIST, 'visit.txt') || die "cannot open file visit.txt ",$!;
foreach $i (sort keys(%account))
{
chomp($visit{$i} = <VISITLIST>);
};
close(VISITLIST);
open (DATELIST, 'date.txt') || die "can't open file date.txt ", $!;
foreach $i (sort keys(%account))
{
chomp($date{$i} = <DATELIST>);
};
close(DATELIST);
system "clear";
print "\n Hi! Anytime you can type 'exit' to escape!";
print "\nLogin:";
chomp ($login = <STDIN>);
if ($login eq 'help') { help(); exit };
unless ( exists($account{$login}) )
{
print "\nSorry, no such login\n";
exit;
};
do
{
print "\Password:";
chomp ($password = <STDIN>);
if ( $password eq 'exit' )
{
print "\n Ok. You may exit";
exit;
};
}
while ( $account{$login} ne $password );
# increase number of visit counter
$visit{$login}++;
open(VISITLIST, '>visit.txt') || die "I can't write in file visit.txt! $!";
foreach $i (sort keys(%account))
{
print VISITLIST "$visit{$i}\n";
};
close(VISITLIST);
# set current date
$date{$login} = time();
open(DATELIST, '>date.txt') || die "I can't wirte in file visit.txt! $!";
foreach $i (sort keys(%account))
{
print DATELIST "$date{$i}\n";
};
close(DATELIST);
########################################
########################################
system("clear");
print "\nYou're in system now.";
do
{
print "\nType about, list, date, visit (to show date of last visit or numbers of visits).".
"\nType exit to escape:";
chomp ($i = <STDIN>);
if ( $i eq 'list' )
{ help(); }
elsif ( $i eq 'visit' )
{ visit(); }
elsif ( $i eq 'date' )
{ visit_date(); }
elsif ( $i eq 'exit' )
{ print "\nGoodbay!\n"; exit; }
elsif ( $i eq 'about' )
{ about()};
}
while (1);
#########################################
# S U B s
#########################################
sub help
{
my($login, $password);
system("clear");
print "\nALL logins:";
while( ($login, $password) = each(%account) )
{
print "\n$login\t$password";
};
};
sub visit
{
my($login, $number, $i);
my @sorted_logins = sort by_visited keys (%visit);
system("clear");
print "\nSorted by visits";
foreach $i (@sorted_logins)
{
print "\n $i\t$visit{$i}";
};
};
sub by_visited
{
($visit{$a} <=> $visit{$b}) || ($a cmp $b);
};
sub visit_date
{
my($i);
my @sorted_logins = sort by_time keys (%date);
system("clear");
print "\nSorted by time of visits";
foreach $i (@sorted_logins)
{
print "\n $i\t".localtime($date{$i});
};
};
sub by_time
{
($date{$a} <=> $date{$b}) || ($a cmp $b);
};
sub about
{
system("clear");
print <<END_of_lines
Задание No 1. PERL. Эмуляция "логина"
1. Эмуляция входа с логином и паролем. Возможность серии попыток
набора пароля при правильном имени.
2. На каждом этапе есть возможность корректно выйти.
3. При запуске системы -- есть меню команд статистики:
лист всех логинов, список визитов, время и дата последнего логина.
4. Список визитов упорядочен по числу визитов (при одинаковом числе --
по имени). Список дата упорядочен по датам (при совпадении дат -- также
по имени).
END_of_lines
};