Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I view the contents of a hash in Perl6 (in a fashion similar to the Perl 5 modules Data::Dump or Data::Show)?

Tags:

hash

perl

raku

In Perl 5, if I want to see the contents of a hash, I can use Data::Show, Data::Dump, or Data::Dumper.

For example:

use Data::Show;

my %title_for = (
    'Book 1' => {
        'Chapter 1' => 'Introduction',
        'Chapter 2' => 'Conclusion',
    },
    'Book 2' => {
        'Chapter 1' => 'Intro',
        'Chapter 2' => 'Interesting stuff',
        'Chapter 3' => 'Final words',
   }
);

show(%title_for);

Which outputs:

======(  %title_for  )======================[ 'temp.pl', line 15 ]======

    {
      "Book 1" => { "Chapter 1" => "Introduction", "Chapter 2" => "Conclusion" },
      "Book 2" => {
                    "Chapter 1" => "Intro",
                    "Chapter 2" => "Interesting stuff",
                    "Chapter 3" => "Final words",
                  },
    }

Is there anything equivalent in Perl 6? I thought I remember Damian Conway discussing this feature at YAPC 2010, but I have since lost my notes and Googling hasn't helped.

use v6;

my %title_for = (
  "Book 1" => { "Chapter 1" => "Introduction", "Chapter 2" => "Conclusion" },
  "Book 2" => {
                "Chapter 1" => "Intro",
                "Chapter 2" => "Interesting stuff",
                "Chapter 3" => "Final words",
              },
);

%title_for.say;

The closest thing that I found to working is %title_for.say. However, it seems messy for nested hashes:

Book 1 => Chapter 1 => Introduction, Chapter 2 => Conclusion, Book 2 => Chapter 1 => Intro, Chapter 2 => Interesting stuff, Chapter 3 => Final words

I'm using Perl6 running on MoarVM from the January 2015 release of Rakudo Star.

like image 296
Christopher Bottoms Avatar asked Feb 17 '15 15:02

Christopher Bottoms


2 Answers

dd for Data Dump in rakudo.

my @array_of_hashes = (
    { NAME => 'apple',   type => 'fruit' },
    { NAME => 'cabbage', type => 'no, please no' },
);
dd @array_of_hashes;
like image 171
Tinmarino Avatar answered Oct 24 '22 18:10

Tinmarino


I have since made a PrettyDump module that might be handy:

use v6;
use PrettyDump;

my %title_for = (
  "Book 1" => { "Chapter 1" => "Introduction", "Chapter 2" => "Conclusion" },
  "Book 2" => {
                "Chapter 1" => "Intro",
                "Chapter 2" => "Interesting stuff",
                "Chapter 3" => "Final words",
              },
);

say PrettyDump.new.dump: %title_for;

With output:

Hash={
    :Book 1(Hash={
        :Chapter 1("Introduction"),
        :Chapter 2("Conclusion")
    }),
    :Book 2(Hash={
        :Chapter 1("Intro"),
        :Chapter 2("Interesting stuff"),
        :Chapter 3("Final words")
    })
}

There are some formatting options you can give to PrettyDump too.

like image 34
brian d foy Avatar answered Oct 24 '22 17:10

brian d foy