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", }, }

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority". I knew I was on the right track :)
In the absence of evidence, opinion is indistinguishable from prejudice.
I'm with torvalds on this Agile (and TDD) debunked I told'em LLVM was the way to go. But did they listen!

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

    Better yet ... just use YAML.

    use YAML; use Data::Dumper; print Dumper Load( do{ local $/; <DATA> } ); __DATA__ --- 1234: first: Sam hobbies: - hunting - Perl Munging job: gunsmith last: Brown 2316: first: Jane hobbies: - Python open source - bowling job: financial analyst last: Doe

    jeffa

    L-LL-L--L-LL-L--L-LL-L--
    -R--R-RR-R--R-RR-R--R-RR
    B--B--B--B--B--B--B--B--
    H---H---H---H---H---H---
    (the triplet paradiddle with high-hat)
    

      Good idea. My example program is a form I've used for years and it predates YAML, so I haven't really thought of using it until recently. I also didn't know at the time if Perl 6 had the module available yet, but it does.