Bryan Harris wrote:

Is it not possible to use $_ in subroutines?

Yes it is, just not the way you seem to want to use it.


For example, my temptation was to do this:

**************************************
sub isDate {

    $_ = shift;
    if (m!\d{2}/\d{2}/\d{2}!) { return 1; }
    else { return 0; }


}

Why is this in a subroutine at all?  If you are using it like:

if ( isDate() ) {  #use $_ by default

Then just do this instead:

if ( m!\d{2}/\d{2}/\d{2}! ) {

Or use a variable instead:

my $isDate = qr!\d{2}/\d{2}/\d{2}!;

...

if ( /$isDate/ ) {


**************************************

... but by modifying $_ I was clobbering $_ elsewhere in the larger program!

Yes because $_ is a special global variable. This effect is called "action at a distance" which is why it is better to use named lexically scoped variables instead of $_.


Oddly, perl won't let me do "my ($_) = shift;", so I'm stuck having to use
another variable.

Perl 5.10 *will* let you do "my $_".


Why can't we do that?  Is using $_ in subroutines discouraged??

Yes, precisely for the problems that you discovered.



John
--
Those people who think they know everything are a great
annoyance to those of us who do.        -- Isaac Asimov

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to