On Tue, 13 Aug 2002, Deven T. Corzine wrote:
: However, will the "func($x{1}{2}{3})" case cause an implementation problem?
This is why the new function type signatures will assume that
parameters are constant. If you want a modifiable parameter, you
have to say "is rw". Then it's considered an lvalue. In Perl 5,
all function args had to be considered potential lvalues.
In essence, all Perl 5 functions have a signature of (*@_ is rw).
Perhaps the translator can turn some of those into (*@_). What'd
really be cool is if it could pick up an initial
my ($a, $b, $c) = @_;
and turn it into an appropriate signature. Of course, there are issues
here if the code modifies those variables, since the issue of whether
a variable is rw is really distinct from whether it represents a pass
by value or reference. Slapping a "constant" on it is a bald-faced
attempt to get the speed of pass-by-reference with the guarantees of
pass-by-value. Perhaps there should be a way to declare a parameter
to be pass-by-value, producing a modifiable variable that does not
affect the caller's value. But I'm not sure saving one assignment
in the body is worth the extra mental baggage.
Larry