Skip to content

Instantly share code, notes, and snippets.

/pairs.diff Secret

Created January 1, 2015 17:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/d654fb6d593bf0830ccc to your computer and use it in GitHub Desktop.
Save anonymous/d654fb6d593bf0830ccc to your computer and use it in GitHub Desktop.
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