in reply to Re: Text::ExtractWords exhibits incomprehensible behavior?
in thread Text::ExtractWords exhibits incomprehensible behavior?

Or perhaps more clearly:
my $me = "old me"; s1($me); print "$me\n"; sub s1 { $_[0] = "new me"; }
But it's customary to make local copies of the parameters like 'my $var = shift' so they don't get changed.

Replies are listed 'Best First'.
Re^3: Text::ExtractWords exhibits incomprehensible behavior?
by ibm1620 (Hermit) on Jun 16, 2024 at 22:35 UTC
    I had no idea this was possible.

    So, I could create a version of `trim` that was more `chomp`-like?

    sub mytrim { $_[0] =~ s/^\s+|\s+$//g; } my $text = ' this could use a trim. '; mytrim $text;
      Yes, @_ is always an alias for the actual variables that were passed to the function. It's generally bad to modify the caller's variables, but in some cases it gives a nice performance boost.

      Since you're just learning this, you should also know that for-loops do the same thing, even if you declare the loop variable with 'my'. IMHO they should have made it so that 'for my' de-aliases the loop item, and a different syntax for the (more efficient) aliasing behavior. Perl didn't have an internal copy-on-write back then though, so this was probably done for efficiency even though it's a bit of a foot-gun.

      sub modify_it { $_[0]= 11; } my $x= 10; for my $y ($x) { modify_it($y); } say $x; // $x is now 11
        Very enlightening. Thanks.

        I did learn about 'for my', the hard way.