At 07:04 PM 8/17/00 +0200, Johan Vromans wrote:
>Nathan Wiger <[EMAIL PROTECTED]> writes:
>
> > Most of the places I've seen them used really well is if
> > they walk and talk like other forms:
> >
> >    $cgi->param($var, @val);      # traditional
> >    $cgi->param($var) = @val;     # lvalue, but same thing
>
>I do not think this is critical. When lvalue subs catch on, the
>traditional way will soon be extinct.
>
>However, if an lvalue sub is an lvalue, it must be an lvalue in _all_
>respects.
>
>     $cgi->param($var) = ...

This is a pure lvalue...

>     $cgi->param($var) += ...

This is not a pure lvalue, but rather both an lvalue and an rvalue, 
equivalent to:

      $cgi->param($var) = $cgi->param($var) + ...

It should evaluate $cgi->param($var) twice, once as an rvalue, and once as 
an lvalue.

>     $cgi->param($var) =~ s///

This is a tricky one...  What should the proper result of:

$cgi->param($var) = "Value constrained to less than 80 characters";
$cgi->param($var) =~ s/./FOO/g;

be?  Should it be allowed to change the value of $cgi->param($var) to more 
than 80 characters?  My though is that it should act like:

{ my $string = $cgi->param($var);
      $string =~ s/./FOO/g;
      $cgi->param($var) = $string;
}
and $cgi->param() can catch any constraint violations like normal.

>     for ( $cgi->param($var) ) {
>         $_ = ...
>     }
>     sysread($fh,$cgi->param($var),...)

These I'm uncertain how to deal with...


>and so on.
>
>And, what would the lvalue routine return?

I would say, by -convention-, it should return the new rvalue of the lvalue:

{ my $inval = 0;
   sub foo : lvalue($val) {
     $inval = $val if defined($val) && $val < 10;
     return $inval;
   }
}

>Currently, $a = $b = $c
>implies that both $b and $a get the value $c. But with lvalue subs I
>can write something like
>
>     yech($foo) = $bar
>
>that assigns $bar to $foo, and returns something else (e.g., the
>previous value of $foo).
>
>     $a = yech($foo) = $bar
>
>now $a will no longer get $bar assigned.
>
>Do we want that?

Sometimes it would be nice.  Why forbid it?


>-- Johan

Reply via email to