#! perl -slw use strict; use Data::Dump qw[ pp ]; our $i //= 'tutorial-data.txt'; our $debug //= 0; open my $in, '<', $i or die "failed to open '$i':$!"; my %users; my $userid; while( <$in> ) { chomp; warn "DEBUG: $_\n" if $debug; s[#.*$][] if /#/; next unless /\S/; my( $lead, $key, $val ) = m[^(\s+)?(\S+)\s*:\s*(.+?)\s*$] or die "Invalid line format at line $."; $key = lc $key; if( defined $lead and length $lead ) { die "Missing userid at $." unless $userid; $val = [ split '\s*,\s*', $val ] if $key eq 'hobbies'; ## modified to trim $users{ $userid }{ $key } = $val; } else { die "Missing userid at line $." unless $val; die "Userid '$val' not a positive integer at line $." unless $val =~ /^\d+$/; die "Userid '$val' not unique at line $." if exists $users{ $val }; $userid = $val; } } warn "DEBUG: Dumping user hash\n" and pp \%users if $debug;