in reply to Re^4: RFC: (DRAFT Tutorial) A Gentle Introduction to Perl 6
in thread RFC: (DRAFT Tutorial) A Gentle Introduction to Perl 6
I threw it away; but here's a rough recreation:
#! 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'; ## modi +fied 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{ $v +al }; $userid = $val; } } warn "DEBUG: Dumping user hash\n" and pp \%users if $debug;
And a debug run:
C:\test>p56tut -debug -i=tutorial-data.txt DEBUG: # file: tutorial-data.txt DEBUG: # a data file of users and their attributes DEBUG: # note all valid lines are in format "key: value..." DEBUG: user: 1234 # unique ID (an integer > zero) DEBUG: last: Brown DEBUG: first: Sam DEBUG: job: gunsmith DEBUG: # hobbies may be a comma-separated list DEBUG: hobbies: hunting, Perl Monging DEBUG: user: 2316 DEBUG: last: Doe DEBUG: first: Jane DEBUG: job: financial analyst DEBUG: hobbies: Python open source, bowling DEBUG: Dumping user hash { 1234 => { first => "Sam", hobbies => ["hunting", "Perl Monging"], job => "gunsmith", "last" => "Brown", }, 2316 => { first => "Jane", hobbies => ["Python open source", "bowling"], job => "financial analyst", "last" => "Doe", }, }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^6: RFC: (DRAFT Tutorial) A Gentle Introduction to Perl 6
by jeffa (Bishop) on Aug 06, 2015 at 18:15 UTC | |
by BrowserUk (Patriarch) on Aug 06, 2015 at 18:32 UTC | |
by u65 (Chaplain) on Aug 06, 2015 at 21:25 UTC |