Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- How do you flatten a hash of key,value pairs?
- sub flatten{
- my($ref,$delim,$item_delim,$array,$str) = @_;
- die("Required Hash Reference") unless isHash($ref);
- $delim = $delim ? $delim :'_';
- #dump into array hash vals #simplified
- if(!$item_delim){
- @{$array} = %{$ref};
- }else{
- my($keys,$values);
- $keys = getKeys($ref);
- $values = getValues($ref);
- #item strings
- if($#$keys > 0 && $#$values > 0){
- #fix for issue where value[n] is empty
- @{$array}= map{ (defined $$values[ $_ ]) ? $$keys[ $_ ].$item_delim.$$values[ $_ ] : $$keys[ $_ ].$item_delim } 0 .. int($#$keys);
- }else{
- log "No Values to flatten";
- return '';
- }
- }
- $str = join($delim,@{$array});
- return $str;
- }
- $HASH => {
- key1 => 'val1',
- key2 => 'val2',
- key3 => 'val3',
- }
- sub flatten {
- my ($hash, $delim, $item_delim) = @_;
- $delim //= '&',
- $item_delim //= '=';
- return join $delim, map { "$_$item_delim$hash->{$_}" } keys %$hash;
- }
- use URI;
- my $uri = URI->new("", "http"); # We don't actually care about the path...
- $uri->query_form(%params);
- my $query_string = $uri->query;
- my $hashref = {
- key1 => 'val1',
- key2 => 'val2',
- key3 => 'val3',
- };
- sub encode {
- my $str = shift;
- $str =~ s/([^A-Za-z0-9./_-])/sprintf("%%%02X", ord($1))/seg;
- return $str;
- }
- my $str = join '&' => map { encode($_).'='.encode($hashref->{$_}) } grep { defined $hashref->{$_} } keys %$hashref;
- key2=val2&key1=val1&key3=val3
- use URI::Escape;
- 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