#!/usr/bin/perl use strict; use warnings; my $str = "item1 | 0 | | item2| item3 |item4 | "; my @cleaned1 = map { clean_no_side_effects($_) } split( /\|/, $str ); my @cleaned2 = grep { clean_no_side_effects($_) } split( /\|/, $str ); print "*"x25, "\n"; print join "\n", @cleaned1; print "*"x25, "\n"; print join "\n", @cleaned2; print "*"x25, "\n"; sub clean_no_side_effects { my $string = shift; $string =~ s/^\s+|\s+$//g; return $string; } sub clean_modify { ## don't use, still using side effects for grep to work $_[0] =~ s/^\s+?|\s+?$//g; # '?' isn't needed here since \s never matches '|' return $_[0]; } sub clean { ## don't use chomp( $_[0] ); $_[0] =~ s/^\s+//g; $_[0] =~ s/\s+$//g; } __END__ ************************* item1 0 item2 item3 item4 ************************* item1 item2 item3 item4 *************************