use Modern::Perl; my @t = qw(name John number 7 status unknown); my $str = ''; while (@t) { $str .= sprintf('%s=%s', shift @t, shift @t); $str .= '&' if @t; } say $str; #### use Modern::Perl; use URI::Escape qw/uri_escape/; my @t = qw(name John number 7 status unknown); $t[1] = 'John Smith'; # something that needs escaping my $str = ''; while (@t) { $str .= sprintf( '%s=%s', uri_escape(shift @t), uri_escape(shift @t), ); $str .= '&' if @t; } say $str; #### use Modern::Perl; use URI::Escape qw/uri_escape/; my @t = qw(name John number 7 status unknown); my %th = @t; # cast to hash my $str = join '&', map { sprintf '%s=%s', uri_escape($_), uri_escape($th{$_}) } keys %th; say $str;