sub read_file { my $self = shift; my $filename = shift; my $i = 0; my $header_parse = 0; my $header_name = 0; open FILE, "<$filename" or die "cannot open $filename for input\n"; while (my $line = readline (*FILE)) { # Strip newlines and leading / trailing whitespace for ($line) { chomp; s/^\s+//; s/\s+$//; } # Skip blank lines and comments next if ($line !~ m/\w/ || $line =~ m/^#/); if ($line =~ m/^\[\s*([\w|\s]+)\s*\]/) { $header_name = $1; $header_parse = 1; } elsif ($header_parse) { $self->{HEADERS}{$header_name} = $line; $header_parse = 0; } else { my @data = split $self->{REGEX}, $line; $self->{DATA}[$i++] = \@data; } } close FILE; }