Guest User

Untitled

a guest
May 8th, 2012
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. How do you flatten a hash of key,value pairs?
  2. sub flatten{
  3. my($ref,$delim,$item_delim,$array,$str) = @_;
  4.  
  5. die("Required Hash Reference") unless isHash($ref);
  6.  
  7. $delim = $delim ? $delim :'_';
  8.  
  9. #dump into array hash vals #simplified
  10. if(!$item_delim){
  11. @{$array} = %{$ref};
  12. }else{
  13. my($keys,$values);
  14.  
  15. $keys = getKeys($ref);
  16. $values = getValues($ref);
  17.  
  18. #item strings
  19. if($#$keys > 0 && $#$values > 0){
  20. #fix for issue where value[n] is empty
  21. @{$array}= map{ (defined $$values[ $_ ]) ? $$keys[ $_ ].$item_delim.$$values[ $_ ] : $$keys[ $_ ].$item_delim } 0 .. int($#$keys);
  22. }else{
  23. log "No Values to flatten";
  24. return '';
  25. }
  26. }
  27.  
  28. $str = join($delim,@{$array});
  29. return $str;
  30. }
  31.  
  32. $HASH => {
  33.  
  34. key1 => 'val1',
  35. key2 => 'val2',
  36. key3 => 'val3',
  37.  
  38. }
  39.  
  40. sub flatten {
  41. my ($hash, $delim, $item_delim) = @_;
  42.  
  43. $delim //= '&',
  44. $item_delim //= '=';
  45.  
  46. return join $delim, map { "$_$item_delim$hash->{$_}" } keys %$hash;
  47. }
  48.  
  49. use URI;
  50.  
  51. my $uri = URI->new("", "http"); # We don't actually care about the path...
  52. $uri->query_form(%params);
  53. my $query_string = $uri->query;
  54.  
  55. my $hashref = {
  56. key1 => 'val1',
  57. key2 => 'val2',
  58. key3 => 'val3',
  59. };
  60.  
  61. sub encode {
  62. my $str = shift;
  63. $str =~ s/([^A-Za-z0-9./_-])/sprintf("%%%02X", ord($1))/seg;
  64. return $str;
  65. }
  66.  
  67. my $str = join '&' => map { encode($_).'='.encode($hashref->{$_}) } grep { defined $hashref->{$_} } keys %$hashref;
  68.  
  69. key2=val2&key1=val1&key3=val3
  70.  
  71. use URI::Escape;
  72. my $str=join '&',map {uri_escape($_).'='.uri_escape($QUERY_STRING->{$_})} grep {defined $QUERY_STRING->{$_}} keys %$QUERY_STRING;
Advertisement
Add Comment
Please, Sign In to add comment