use strict; # returns the data as an array ref my $data = get_graph_data('header_data.dat', 'daily_data*.dat'); sub get_graph_data { my ($header,$file_name_format) = @_; my @dailies = glob($file_name_format); my @data; @dailies = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, get_number_in_string($_) ] } @dailies; foreach my $file ( $header, @dailies ) { local *IN; open IN, "< $file" or die "Cannot open ($file) for reading: $!"; push @data => []; close IN or die "Cannot close ($file): $!"; } return \@data; } sub get_number_in_string { # returns the first instance of one or more digits in string my $string = shift || ''; my ($number) = $string =~ /^([[:digit:]]+)$/; return $number; }