simran wrote: > I wrote my self this subroutine... which comes in very handy :-) > > ..snip > > sub strip { > my $self = shift; > my $ref = shift; > > if (! ref($ref)) { > $ref =~ s/(^[\s\t]*)|([\s\t]*$)//g if (defined $ref);
Why is it better to do this in two steps? Read through this FAQ perldoc -q 'How do I strip blank space from the beginning/end of a string' \s includes \t, the character class [\s\t] is uneccessary. The capture in your regex match can also be avoided, you might want to a look at the '?:' extended pattern in perldoc perlre. The 'g' modifier does not server any purpose, it would if used along with the 's' or 'm' modifier. > > return $ref; > } > elsif (ref($ref) =~ /^ARRAY$/i) { This could just have been elsif (ref($ref) eq 'ARRAY'), avoid regexes if possible. > > foreach my $i (0 .. $#$ref) { > $ref->[$i] =~ s/(^[\s\t]*)|([\s\t]*$)//g; > } > } > elsif (ref($ref) =~ /^HASH$/i) { > while (my ($key, $value) = each %$ref) { > delete $ref->{$key}; > $key =~ s/(^[\s\t]*)|([\s\t]*$)//g; > $value =~ s/(^[\s\t]*)|([\s\t]*$)//g; > $ref->{$key} = $value; > } > } > elsif (ref($ref) =~ /^SCALAR$/i) { > $$ref =~ s/(^[\s\t]*)|([\s\t]*$)//g; > } > else { > die "Unknown reference type"; > } > } > This is another approach for the same problem, you can use this for starters :-) The arguments passed to a subroutine in the @_ arrays are aliases for the original parameters (perldoc perlsub). You can make use of that here. sub trim { foreach (@_) { my $ref_to = ref ($_); SWITCH: { (!$ref_to) && do { s/^\s+//; s/\s+$//; last SWITCH; }; ($ref_to eq 'SCALAR') && do { ${$_} =~ s/^\s+//; ${$_} =~ s/\s+$//; last SWITCH; }; ($ref_to eq 'ARRAY') && do { foreach my $arr_elem (@{$_}) { $arr_elem =~ s/^\s+//; $arr_elem =~ s/\s+$//; } last SWITCH; }; ($ref_to eq 'HASH') && do { foreach my $hash_val (%{$_}) { $hash_val =~ s/^\s+//; $hash_val =~ s/\s+$//; } last SWITCH; }; print "Invalid parameter\n"; } } } HTH -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]