http://qs321.pair.com?node_id=91712

OK, there's been this recent discussion on comp.lang.perl.misc, and it's gotten perverse enough to drag one of the postings over to the monestary.

A simple mechanism to turn a list of comma-separated-values into a list of hashrefs, each hashref naming the fields from the comma-separated-values. When we got to using the term "hashificator", I knew it needed a wider audience. Enjoy!

According to Anno Siegel <anno4000@lublin.zrz.tu-berlin.de>: > According to Randal L. Schwartz <merlyn@stonehenge.com>: > > [...] > > > More perversely perlish: > > > > @game = map +{ > > (qw/name score date/, split /,/)[0,3,1,4,2,5] > > }, @scores; > > > > Do Not Try This At Home. :) > > Ah... retro-hashification of the unwieldy. I knew there had to > be something like that. ...and it generalizes: my @keys = qw/name score date comment/; my @hashificator = map( ( $_, $_ + @keys), 0 .. @keys - 1); @game = map +{ (@keys, split /,/)[ @hashificator] }, @scores;

Replies are listed 'Best First'.
Re: Converting a CSV list to a list of hashrefs naming the fields
by MeowChow (Vicar) on Jun 27, 2001 at 00:06 UTC
    Why not simply:
    my @keys = qw/name score date comment/; my @game; @{$game[@game]}{@keys} = split /,/ for @scores;
       MeowChow                                   
                   s aamecha.s a..a\u$&owag.print
      Yes, that was one of the alternatives, but the idea of doing it as a stream for a possibly larger pipeline suggested the use of a map.

      -- Randal L. Schwartz, Perl hacker