This does the trick...
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;
Though if what you're trying to do is construct a query string for a URI, you want to use URI::Escape, which will escape any special characters in your string. (For example, what if one of the strings in your array already contains an equals sign?)
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;
It's a shame you said that the order matters. If it didn't, then casting your array to a hash would be a neat trick:
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;
In reply to Re: Joining an array
by tobyink
in thread Joining an array
by tangent
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |