in reply to Re^4: Changing array by changing $_?
in thread Changing array by changing $_?

OK. I can just about imagine how assignment to an ordinary scalar and assignment via an alias would be the same at run-time -- at run-time it doesn't much matter where the pointer to the SV has come from.

However, I would have thought that the two must be distinguished at compile time -- something has to take care of the implied dereference -- for no run-time penalty.

I realise that there are plenty of other traps for the new and the unwary -- but I can still remember the pain of learning about this one !

Replies are listed 'Best First'.
Re^6: Changing array by changing $_?
by ikegami (Patriarch) on Oct 13, 2008 at 16:23 UTC

    I would have thought that the two must be distinguished at compile time

    A lexical var is either always an alias or never an alias, so you can for those. But it's a different story for globals.

    sub func { $_ = "foo"; } func() for my $var; # $_ is an alias func(); # $_ isn't an alias

    Update: Oops, not even for lexicals if you use Data::Alias. But you could say that if alias is being used, you know you're dealing with an alias.