-
-
Save anonymous/d654fb6d593bf0830ccc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/Makefile.PL b/Makefile.PL | |
index 0215dc1..6fb73eb 100644 | |
--- a/Makefile.PL | |
+++ b/Makefile.PL | |
@@ -7,6 +7,7 @@ use ExtUtils::MakeMaker; | |
# Pod::Simple 3.09 first shipped with Perl 5.11.2 | |
# Time::Local 1.2 first shipped with Perl 5.13.9 | |
+# List::Util 1.31 first shipped with Perl 5.19.3 | |
# IO::Socket::IP 0.26 first shipped with Perl 5.19.8 | |
WriteMakefile( | |
NAME => 'Mojolicious', | |
@@ -27,6 +28,7 @@ WriteMakefile( | |
}, | |
PREREQ_PM => { | |
'IO::Socket::IP' => '0.26', | |
+ 'List::Util' => '1.31', | |
'Pod::Simple' => '3.09', | |
'Time::Local' => '1.2' | |
}, | |
diff --git a/lib/Mojo/Parameters.pm b/lib/Mojo/Parameters.pm | |
index d42959e..0efcf52 100644 | |
--- a/lib/Mojo/Parameters.pm | |
+++ b/lib/Mojo/Parameters.pm | |
@@ -6,6 +6,7 @@ use overload | |
'""' => sub { shift->to_string }, | |
fallback => 1; | |
+use List::Util qw(pairmap pairs); | |
use Mojo::Util qw(decode encode url_escape url_unescape); | |
has charset => 'UTF-8'; | |
@@ -14,8 +15,8 @@ sub append { | |
my $self = shift; | |
my $params = $self->params; | |
- my @pairs = @_ == 1 ? @{shift->params} : @_; | |
- while (my ($name, $value) = splice @pairs, 0, 2) { | |
+ for my $pair (pairs @_ == 1 ? @{shift->params} : @_) { | |
+ my ($name, $value) = @$pair; | |
# Multiple values | |
if (ref $value eq 'ARRAY') { push @$params, $name => $_ // '' for @$value } | |
@@ -42,12 +43,8 @@ sub every_param { shift->_param(@_) } | |
sub merge { | |
my $self = shift; | |
- | |
my @pairs = @_ == 1 ? @{shift->params} : @_; | |
- while (my ($name, $value) = splice @pairs, 0, 2) { | |
- defined $value ? $self->param($name => $value) : $self->remove($name); | |
- } | |
- | |
+ pairmap { defined $b ? $self->param($a => $b) : $self->remove($a) } @pairs; | |
return $self; | |
} | |
@@ -117,12 +114,8 @@ sub parse { | |
sub remove { | |
my ($self, $name) = @_; | |
- | |
my $params = $self->params; | |
- my $i = 0; | |
- $params->[$i] eq $name ? splice @$params, $i, 2 : ($i += 2) | |
- while $i < @$params; | |
- | |
+ @$params = pairmap { $a eq $name ? () : ($a, $b) } @$params; | |
return $self; | |
} | |
@@ -131,8 +124,8 @@ sub to_hash { | |
my %hash; | |
my $params = $self->params; | |
- for (my $i = 0; $i < @$params; $i += 2) { | |
- my ($name, $value) = @{$params}[$i, $i + 1]; | |
+ for my $pair (pairs @$params) { | |
+ my ($name, $value) = @$pair; | |
# Array | |
if (exists $hash{$name}) { | |
@@ -161,8 +154,8 @@ sub to_string { | |
my $params = $self->params; | |
return '' unless @$params; | |
my @pairs; | |
- for (my $i = 0; $i < @$params; $i += 2) { | |
- my ($name, $value) = @{$params}[$i, $i + 1]; | |
+ for my $pair (pairs @$params) { | |
+ my ($name, $value) = @$pair; | |
# Escape and replace whitespace with "+" | |
$name = encode $charset, $name if $charset; | |
@@ -179,13 +172,7 @@ sub to_string { | |
sub _param { | |
my ($self, $name) = @_; | |
- | |
- my @values; | |
- my $params = $self->params; | |
- for (my $i = 0; $i < @$params; $i += 2) { | |
- push @values, $params->[$i + 1] if $params->[$i] eq $name; | |
- } | |
- | |
+ my @values = pairmap { $a eq $name ? $b : () } @{$self->params}; | |
return \@values; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment