Blob


1 #!/usr/bin/perl
3 # Modify the program from Exercise 1 to use JSON instead of Storable.
5 use v5.24;
6 use warnings;
7 use strict;
8 use utf8;
9 use Data::Dumper;
10 use local::lib;
11 use JSON;
13 my %hosts;
14 my $storagepath = "ex6-2.data";
15 if (-e $storagepath) {
16 local $/;
17 open my $fh, '<', $storagepath or die "Unable to read from '$storagepath': $!";
18 my $data = <$fh>;
19 %hosts = %{from_json($data)};
20 }
21 while (<>) {
22 next if (/\A\s*#/);
23 my ($src, $dst, $bytes) = split;
24 $hosts{$src}{$dst} += $bytes;
25 }
26 open my $fh, '>', $storagepath or die "Unable to write to '$storagepath': $!";
27 print $fh to_json(\%hosts, { pretty => 1 });
28 sub sum {
29 my $hashref = shift;
30 my $total;
31 foreach (keys %{$hashref}) {
32 $total += $hashref->{$_};
33 }
34 return $total;
35 }
36 foreach my $src (sort { sum($hosts{$b}) <=> sum($hosts{$a}) } keys %hosts) {
37 print "Total bytes ($src): ". sum($hosts{$src}) ."\n";
38 foreach my $dst (sort { $hosts{$src}{$b} <=> $hosts{$src}{$a} }
39 keys %{$hosts{$src}}) {
40 print "$src => $dst $hosts{$src}{$dst}\n";
41 }
42 }