Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 8th, 2012  |  syntax: None  |  size: 1.67 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  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;