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

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;

Replies are listed 'Best First'.
Re^4: Text::ExtractWords exhibits incomprehensible behavior?
by NERDVANA (Priest) on Jun 18, 2024 at 00:44 UTC
    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.