#!/usr/bin/env perl use v5.12; #use Test::More; #use Modern::Perl; use Modern::Perl 2011; use autodie; use Data::Dumper; ## Example from here: # http://modernperlbooks.com/books/modern_perl_2014/03-perl-language.html#TmVzdGVkRGF0YVN0cnVjdHVyZXM ## Perl Version # $ perl -v # This is perl 5, version 12, subversion 4 (v5.12.4) built for darwin-thread-multi-2level # (with 2 registered patches, see perl -V for more detail) ## Code snippet below did not work, got undefined values. ## Had to first declare 'entree' with my in one statement, then assign to it. ## Question: Wondering why this has to be so, and why the book version does not work, as ## it seems that it should. my %meals = ( breakfast => { entree => 'eggs', side => 'hash browns' }, lunch => { entree => 'panini', side => 'apple'}, dinner => { entree => 'steak', side => 'avocado salad' }, ); ## Work on structure ## From the book: my ($entree, $side) = @{ $_ }{qw(entree side)} for $meals{breakfast}; defined $entree ? say "book version entree defined." : say "book version entree NOT defined."; ## Output: #book version entree NOT defined. ## How I made work my ($entree2, $side2); ($entree2, $side2) = @{ $_ }{qw(entree side)} for $meals{breakfast}; defined $entree2 ? say "predeclare entree2 defined." : say "predelcare entree2 NOT defined."; ## Output: #predeclare entree2 defined.