my $test_hash1 = { '-P' => 'hostPassword', 'single_switches' => [ '-N' ], 'alternate_param_options' => [ 'all', 'objects', { '-H' => [ 'hosting-storage-system', 'vfiler' ], '-S' => [ 'saf' ] }, $VAR1->{'alternate_param_options'}[2] ], 'mandatory' => [ 'end' ], '-U' => 'hostLogin' }; print Dumper($test_hash1); my @param_list = get_param_list ($test_hash1); print "\nParam List : @param_list\n"; foreach my $element (@param_list){ print "\nValue : $element\n"; my $key = getKeyValue($test_hash1,$element,"HASH"); print "\nKey : $key\n"; } sub get_param_list{ my $_cli_ref = shift; my @_param_list; my ($_key,$_value,$_element); #print ref $_cli_ref,"\n"; if ((ref $_cli_ref) =~ /.*?HASH.*/i){ while (($_key,$_value) = each %$_cli_ref){ #print "\nKey : $_key\nValue : $_value\n";getc(); if ($_value =~ /.*?ARRAY.*/i){ push (@_param_list,get_param_list($_value)); }elsif($_value =~ /.*?HASH.*/i){ push (@_param_list,get_param_list($_value)); }else{ push (@_param_list,$_value) if ($_value !~ /^\-[a-zA-Z]{1}/); } } } if ((ref $_cli_ref) =~ /.*?ARRAY.*/i){ foreach $_element (@$_cli_ref){ #print "\nElement : $_element\n"; if ($_element =~ /.*?ARRAY.*/i){ push (@_param_list,get_param_list($_element)); }elsif($_element =~ /.*?HASH.*/i){ push (@_param_list,get_param_list($_element)); }else{ push (@_param_list,$_element) if ($_element !~ /^\-[a-zA-Z]{1}/); } } } return @_param_list; } sub getKeyValue { my $_syn_tree = shift; my $_value = shift; my $_type = shift; my ($_hkey,$_hvalue); my $_key ; my $_key1 ; my $_found ; if ((ref $_syn_tree) =~ /.*?HASH.*/i){ while(($_hkey,$_hvalue) = each %$_syn_tree){ if ($_hvalue =~ /.*?(HASH).*/i){ $_key = getKeyValue($_hvalue,$_value,$1); }elsif($_hvalue =~ /.*?(ARRAY).*/i ){ $_key1 = $_hkey if($_hkey =~ /\-[a-zA-Z]{1}/); $_found = getKeyValue($_hvalue,$_value,$1); $_key = $_key1 if ($_found == 1); }elsif($_hvalue eq $_value){ $_key = $_hkey if($_hkey =~ /\-[a-zA-Z]{1}/); }else{ } } } if((ref $_syn_tree) =~ /.*?ARRAY.*/i){ foreach (@$_syn_tree){ if ($_ eq $_value){ $_found = 1; }elsif($_ =~ /.*?(ARRAY).*/i){ $_found = getKeyValue($_,$_value,$1); }elsif($_ =~ /.*?(HASH).*/i){ $_key = getKeyValue($_,$_value,$1); }else{ } } } return $_key if ($_type eq "HASH"); return $_found if ($_type eq "ARRAY"); }