in reply to Joining an array
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;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Joining an array
by CountZero (Bishop) on Feb 11, 2012 at 19:00 UTC | |
|
Re^2: Joining an array
by tangent (Parson) on Feb 11, 2012 at 00:57 UTC | |
by tobyink (Canon) on Feb 11, 2012 at 09:02 UTC | |
by tangent (Parson) on Feb 11, 2012 at 16:23 UTC |