in reply to Re^3: RFC: (DRAFT Tutorial) A Gentle Introduction to Perl 6
in thread RFC: (DRAFT Tutorial) A Gentle Introduction to Perl 6

I downloaded your P5 example and ran it. I reformatted it to an acceptable standard. I threw away the superfluous fluff. I trimmed the unnecessary verbosity.

Please post your version so I can see the error of my ways.

UPDATE 1:

I disagree with the formatting comment. My code I believe closely adheres to Prof. Conway's style. Also, I do not believe in brevity for the sake of brevity. I never know who's reading my code--most likely someone with much less Perl knowledge than most monks here.

However, thanks to your comments, I have used perlcritic for the first time and will update the Perl 5 code soon.

Replies are listed 'Best First'.
Re^5: RFC: (DRAFT Tutorial) A Gentle Introduction to Perl 6
by BrowserUk (Patriarch) on Aug 06, 2015 at 12:37 UTC

    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!

      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.