Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: Traversing a complex data structure searching for certain keys and printing their values

by newperluser2013 (Novice)
on Apr 29, 2013 at 01:07 UTC ( #1031136=note: print w/ replies, xml ) Need Help??


in reply to Re: Traversing a complex data structure searching for certain keys and printing their values
in thread Traversing a complex data structure searching for certain keys and printing their values

Thanks for your help. This looks really good. Unfortunately I only have perl 5.12 so this fails with these errors

Type of arg 1 to keys must be hash or array (not private variable) at +./test.pl line 25, near "$value ]" Type of arg 1 to keys must be hash or array (not private variable) at +./test.pl line 32, near "$found) " Type of arg 1 to values must be hash or array (not private variable) a +t ./test.pl line 34, near "$found)"

Also as regards %filer_device and %filer_volume sometimes in this data structure these are not hashes, sometimes both are, and sometimes one is and the other isn't I am really not too sure how to go about dealing with that :-( Also regarding the %defaults section I am not allowed to hardcode that. In the small sample of this data structure I have shown this is tied in to the tag "@dev". So any mountpoint defined under here gets those permissions. In the rest of the data structure I have other tags like @build and @software and under each one of these they have their own set of multiple mount point definitions and their own set of default permissions that need to be set. I ultimately need to print the strings out in the following format without hardcoding any key names in the subroutine I use to parse the data struture. All I can pass to the subroutine is the data structure and the @keylist:

@dev:/links:nydevnfs_links:/vol/links:0755:root:root:nfsvers=3,timeo=6 +00,re +trans=2 @dev:/links:rnap7750-s:/vol/links_c:0755:root:root:nfsvers=3,timeo=600 +,retr +ans=2 @dev:/home7:nydevnfs_home7:/vol/home7:0755:root:root:nfsvers=3,timeo=6 +00,re +trans=2 @dev:/home7:rnap7751-s:/vol/home7_c:0755:root:root:nfsvers=3,timeo=600 +,retr +ans=2 @dev:/home8:nydevnfs_home2:/vol/home2:0755:root:root:nfsvers=3,timeo=6 +00,re +trans=2 @dev:/home8:rnap2114-s:/vol/home2_c:0755:root:root:nfsvers=3,timeo=600 +,retr +ans=2


Comment on Re^2: Traversing a complex data structure searching for certain keys and printing their values
Select or Download Code
Re^3: Traversing a complex data structure searching for certain keys and printing their values
by choroba (Abbot) on Apr 29, 2013 at 01:16 UTC
    To fix the first problem, just prepend % to the indicated reference variables.

    To the rest, I cannot say more than "Good luck".

    لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

      Thanks alot for all your help. As regards prepended % to these variables. Please can you show me where I need to do this? I have tried doing this and I am still getting errors :-(

      Thanks alot for all your help. Can you show me where I need to prepend % please?

      Thanks ever so much for your help choroba I have made the changes you suggested and this is now working perfectly :-) Just one thing if you can help. In the sample data structure I posted there is a @dev tag in this and I need to get this value prepended to each line of output. I mustn't hardcode this though. I have other hashes of hashes defined under this whole @dev section which are called @build and @software (which both have loads of mount definitions in )and to each of the lines printed when I parse these I need to prepend the corresponding tag @build/@software. Would you be able to help me with what I need to do here please?

        Just one other thing would you know what I would need to do to this sub routine so that I could get different output formats? For example I still need to pass in @keylist to the subroutine to make sure all the keys are there but I want to also parse in an output format string aswell. So for example if I wanted to print all the lines like this:

        %export_name:%filer_device:%filer_volume

        or print them with every value like this:

        %export_name:%filer_device:%filer_volume:%mount_acl:%mount_group:%moun +t_user:%mount_opts

        So I want to be able to pass in $output_format to this function. $output_format equates to one of the strings above. So I could the run funtion like this:

        recurse_hash(\%$decoded_json_obj, {}, @keylist, $output_format);
        I hope the hints I have given should be enough for you to hack a solution yourself. If there are details you still do not grasp, feel free to ask a new question, but do not await we do your work for you.
        لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1031136]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (6)
As of 2014-07-31 01:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (244 votes), past polls