On Friday 02 April 2004 06:37 am, JupiterHost.Net wrote: > Hello List, > > It just occurred to me that many Perl functions use $_ if not other > value is supplied. chomp for instance..., which is very handy... > > If one wanted to write a function that used either the given argument or > $_ how would you do that? > > myfunc($myvalue); > or > myfunc; #uses the current value of $_ > > sub myfunc { > > my $func_arg = shift || ????; # you wouldn't just do '|| $_;' would you? > > ... >
Hi - I think what you are trying to do is modify a passed argument - like chomp does - which really has nothing to do with $_. Normaly a subroutine gets its arguments from the @_ array and puts them in a private variable, does its thing, and returns a value. This is commonly called 'pass by reference' and is a nice, safe way to do things. If you want to operate on the passed arguments themselves ('pass by value') - which can be more error prone (at least in some cases), you can do that - as chomp does. In the sample below, 'to_lower' modifies the incoming argument, and 'to_upper' does not. #!/bin/perl use strict; use warnings; my $string = 'hello'; print "before to_upper: $string\n"; to_upper( $string ); print " after to_upper: $string\n"; to_lower( $string ); print " after to_lower: $string\n"; sub to_upper { # actually modified the incoming argument the - # 0th element of @_. $_[0] = uc $_[0]; } sub to_lower { # traditional approach my $string = shift; lc $string; return $string; } When run, it returns: before to_upper: hello after to_upper: HELLO after to_lower: HELLO Aloha => Beau; -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>