in reply to Setting up conditional check for printing out keys from array/hash ref
There are a large number of ways to solve this problem and the best solutions probably involve recursion to deal with nested directories. However, you haven't asked for such a solution (yet) so here's a solution that uses Perl 5.10 (and later)'s switch statement:
use strict; use warnings; use 5.010; my $lsResults1 = { 'recursive' => 'no', 'version' => '0.20.202.1.1101050227', 'time' => '2011-10-26T00:21:06+0000', 'filter' => '.*', 'path' => '/work/eng/feeds/customer_care', 'directory' => [ { 'owner' => 'tst_act', 'group' => 'eng', 'permission' => 'drwxr-xr-x', 'path' => '/work/eng/feeds/customer_care', 'accesstime' => '1970-01-01T00:00:00+0000', 'modified' => '2011-10-25T23:54:17+0000' }, { 'owner' => 'tst_act', 'group' => 'eng', 'permission' => 'drwx------', 'path' => '/work/eng/feeds/customer_care/abc', 'accesstime' => '1970-01-01T00:00:00+0000', 'modified' => '2011-10-25T17:12:56+0000' }, { 'owner' => 'tst_act', 'group' => 'eng', 'permission' => 'drwx------', 'path' => '/work/eng/feeds/customer_care/def', 'accesstime' => '1970-01-01T00:00:00+0000', 'modified' => '2011-10-25T21:05:50+0000' }, { 'owner' => 'tst_act', 'group' => 'eng', 'permission' => 'drwx------', 'path' => '/work/eng/feeds/customer_care/test', 'accesstime' => '1970-01-01T00:00:00+0000', 'modified' => '2011-10-25T21:28:14+0000' } ], 'exclude' => '' }; my $lsResults2 = { 'recursive' => 'no', 'version' => '0.20.202.1.1101050227', 'time' => '2011-10-26T00:30:02+0000', 'filter' => '.*', 'file' => { 'owner' => 'tst_act', 'replication' => '3', 'blocksize' => '134217728', 'permission' => '-rw-------', 'path' => '/work/eng/feeds/customer_care/test/q_data_20111 +023.dat', 'modified' => '2011-10-26T00:29:46+0000', 'size' => '379085', 'group' => 'eng', 'accesstime' => '2011-10-26T00:29:46+0000' }, 'path' => '/work/eng/feeds/customer_care/test', 'directory' => { 'owner' => 'tst_act', 'group' => 'eng', 'permission' => 'drwx------', 'path' => '/work/eng/feeds/customer_care/test', 'accesstime' => '1970-01-01T00:00:00+0000', 'modified' => '2011-10-26T00:29:46+0000' }, 'exclude' => '' }; for my $result ($lsResults1, $lsResults2) { for (keys %$result) { when ('file') { print "Filename: $result->{file}{path}\n"; print " Size: $result->{file}{size}\n"; } when ('directory') { given (ref $result->{directory}) { when ('ARRAY') { for my $entry (@{$result->{directory}}) { print "Directory: $entry->{path}\n"; } } when ('HASH') { print "Directory: $result->{directory}{path}\n"; } } } } }
Prints:
Directory: /work/eng/feeds/customer_care Directory: /work/eng/feeds/customer_care/abc Directory: /work/eng/feeds/customer_care/def Directory: /work/eng/feeds/customer_care/test Filename: /work/eng/feeds/customer_care/test/q_data_20111023.dat Size: 379085 Directory: /work/eng/feeds/customer_care/test
Notice the use of ref to determine what type of directory entry is being dealt with and the use of keys to work through the hash entries looking or the interesting stuff.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Setting up conditional check for printing out keys from array/hash ref
by JaeDre619 (Acolyte) on Oct 27, 2011 at 13:26 UTC | |
by GrandFather (Saint) on Oct 27, 2011 at 22:39 UTC | |
by JaeDre619 (Acolyte) on Oct 27, 2011 at 23:41 UTC | |
by GrandFather (Saint) on Oct 28, 2011 at 07:30 UTC | |
by JaeDre619 (Acolyte) on Oct 28, 2011 at 21:22 UTC | |
|