#!/usr/bin/perl -w use strict; use constant EXPENSE_FILE => 'expense.dat'; use constant EXPENSE_REPORT => 'final_expense.txt'; use constant FIELDS_PER_RECORD => 4; use constant REPORT_HEADER => "Department,Total\n"; open IN_FILE, "<", EXPENSE_FILE or die "Cannot open ".EXPENSE_FILE." for reading: $!"; my @expenses = ; close IN_FILE; my %deptTotals; foreach my $expense ( @expenses ) { my %record; my @fields = qw/ dept empID amount desc /; @record{ @fields } = split /,/, $expense, FIELDS_PER_RECORD; if ( ! exists $deptTotals{ $record{ dept } } ) { $deptTotals{ $record{ dept } } = 0; } $deptTotals{ $record{ dept } } += $record{ amount }; } open OUT_FILE, ">", EXPENSE_REPORT or die "Cannot open ".EXPENSE_REPORT." for writing: $!"; print OUT_FILE REPORT_HEADER; foreach my $dept ( sort keys %deptTotals ) { print OUT_FILE "$dept,$deptTotals{ $dept }\n"; } close OUT_FILE;