-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbook_library.pl
More file actions
41 lines (34 loc) · 1013 Bytes
/
book_library.pl
File metadata and controls
41 lines (34 loc) · 1013 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/perl
#
use strict;
use warnings;
my %lib;
open my $fh, "book_library.txt" or die "Cannot open book_library.txt\n";
while ( my $line = readline $fh ) {
my ( $book, $reader ) = split ' ', $line;
$lib{$book} = {} unless ( defined $lib{$book} );
$lib{$book}->{$reader} = 0 unless ( defined $lib{$book}->{$reader} );
$lib{$book}->{$reader}++;
}
close $fh;
sub reads {
my $bookref = shift;
my $reads = 0;
foreach my $reader ( keys %{$bookref} ) {
$reads += $bookref->{$reader};
}
return $reads;
}
printf "Количество аренд:\n";
my @bbooks = sort { reads( $lib{$b} ) <=> reads( $lib{$a} ) } keys %lib;
for ( my $i = 0; $i < 5; $i++ ) {
printf $bbooks[$i] . ' ' . reads( $lib{ $bbooks[$i] } ) . "\n";
}
printf "\nУникальных читателей:\n";
my @breaders
= sort { scalar( keys %{ $lib{$b} } ) <=> scalar( keys %{ $lib{$a} } ) }
keys %lib;
for ( my $i = 0; $i < 5; $i++ ) {
printf $breaders[$i] . ' '
. scalar( keys %{ $lib{ $breaders[$i] } } ) . "\n";
}