Skip to content

Commit

Permalink
Faster regexes; rstauner++
Browse files Browse the repository at this point in the history
Fixes GH #3
  • Loading branch information
doherty committed Oct 5, 2011
1 parent de09c5b commit d2117e7
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 9 deletions.
1 change: 1 addition & 0 deletions Changes
@@ -1,6 +1,7 @@
Revision history for Perl module String-Trim

{{$NEXT}}
* Faster regexes, courtesy of Randy Stauner

0.005 2011-04-21
* Added tests
Expand Down
30 changes: 21 additions & 9 deletions lib/String/Trim.pm
Expand Up @@ -48,19 +48,26 @@ C<trim> also knows how to trim an array or arrayref:
=cut

sub trim { # Starting point: http://www.perlmonks.org/?node_id=36684
my $t = qr{^\s+|\s+$};
my $t1 = qr{\A\s+};
my $t2 = qr{\s+\z};

if (defined wantarray) {
@_ = (@_ ? @_ : $_);
if (ref $_[0] eq 'ARRAY') {
@_ = @{ $_[0] };
for (@_) { s{$t}{}g if defined $_ }
for (@_) { if (defined $_) { s/$t1//; s/$t2//; } }
return \@_;
}
elsif (ref $_[0] eq 'HASH') {
foreach my $k (keys %{ $_[0] }) {
(my $nk = $k) =~ s{$t}{}g;
my $nk = $k;
$nk =~ s/$t1//;
$nk =~ s/$t2//;

if (defined $_[0]->{$k}) {
($_[0]->{$nk} = $_[0]->{$k}) =~ s{$t}{}g;
$_[0]->{$nk} = $_[0]->{$k};
$_[0]->{$nk} =~ s/$t1//;
$_[0]->{$nk} =~ s/$t2//;
}
else {
$_[0]->{$nk} = undef;
Expand All @@ -69,19 +76,24 @@ sub trim { # Starting point: http://www.perlmonks.org/?node_id=36684
}
}
else {
for (@_ ? @_ : $_) { s{$t}{}g if defined $_ }
for (@_ ? @_ : $_) { if (defined $_) { s/$t1//; s/$t2// } }
}
return wantarray ? @_ : $_[0];
}
else {
if (ref $_[0] eq 'ARRAY') {
for (@{ $_[0] }) { s{$t}{}g if defined $_ }
for (@{ $_[0] }) { if (defined $_) { s/$t1//; s/$t2// } }
}
elsif (ref $_[0] eq 'HASH') {
foreach my $k (keys %{ $_[0] }) {
(my $nk = $k) =~ s{$t}{}g;
my $nk = $k;
$nk =~ s/$t1//;
$nk =~ s/$t2//;

if (defined $_[0]->{$k}) {
($_[0]->{$nk} = $_[0]->{$k}) =~ s{$t}{}g;
$_[0]->{$nk} = $_[0]->{$k};
$_[0]->{$nk} =~ s/$t1//;
$_[0]->{$nk} =~ s/$t2//;
}
else {
$_[0]->{$nk} = undef;
Expand All @@ -90,7 +102,7 @@ sub trim { # Starting point: http://www.perlmonks.org/?node_id=36684
}
}
else {
for (@_ ? @_ : $_) { s{$t}{}g if defined $_ }
for (@_ ? @_ : $_) { if (defined $_) { s/$t1//; s/$t2// } }
}
}
}
Expand Down

0 comments on commit d2117e7

Please sign in to comment.