Образец задания к уроку 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 };