Dan Muey wrote: > I have this subroutine and it does what I need :: > > print rmgtlt($var); > > sub rmgtlt { > > $_[0] =~ s/^\<|\>$|\n|\r|\s$//g; > return $_[0]; > } > > Is there a way to so the substitution and return the result in one > line? > > Like :: > > sub rmgtlt { > return ??? $_[0] =~ s/^\<|\>$|\n|\r|\s$//g; > } > > I tried using parenthesis and using list context :: > return my($q) = $_[0] =~ s/(^\<|\>$|\n|\r|\s$)//g; } > > And you might have figured it returned the number of elements matched > and not the newly fixed up variable contentes. > > Is there a way to do this? > I know I must be missing something obvious , thanks for any guidance!
Hi Dan. How about: sub rmgtlt { $_[0] =~ s/^\<|\>$|\n|\r|\s$//g; return $_[0]; } ;-D Seriously though, there's no way to do it apart from something like that since, as you've discovered, the substitute operator returns the number of substitutions it has performed - the modified string isn't available without using it explicitly. You can make it a little smaller though: the regex could be slightly shorter and the 'return' is unnecessary on the last line of the routine. sub rmgtlt { $_[0] =~ s/^<|[\n\r]|[>\s]$//g; $_[0] } Did you realise though, that since the substitution is changing the element of the @_ array, the actual parameter in the call will be modified, so that my $email = '<[EMAIL PROTECTED]>'; rmgtlt ($email); will edit $email for you? There's no need to do $email = rmgtlt ($email); as you may be thinking. Also, the parameter must be an lvalue. If you call the routine with a constant string as its parameter it will fail because the substitution cannot be done on a constant. HTH, Rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]