use strict; sub _read_benchmark { my %yesterday; open BENCH, "benchmark_file" or die "$!"; while () { chomp; $yesterday{$_}++; } close BENCH or warn "$!"; return \%yesterday; } sub _scan_system { my $yesterday = shift; my %today; open BENCH, "> benchmark_file" or die "$!"; open IN, "find / $search_files -print |" or die "$!"; while () { chomp; print BENCH "$_\n"; if (exists $yesterday->{$_}) { delete $yesterday->{$_}; } else { $today{$_}++; } } close IN or warn "$!"; close BENCH or warn "$!"; return \%today, $yesterday; } sub _print_report { ... } my $yesterday = _read_benchmark; my ($today, $yesterday) = _scan_system($yesterday); _print_report($today, $yesterday);