Damian Conway writes:
>    >   sub foo :lvalue { $foo }
>    >   post foo { die if $foo == 5 }
>    > 
>    >   eval {
>    >     foo() = 5;
>    >   };
>
> Postconditions on lvalue subs are not tested until the end of the complete 
> expression in which the sub is called.

But that won't change the fact that they are called *after* the lvalue
has changed.  If they detect a problem, they can't unroll the change.

When you are passed the new value as an argument, you can die before
a change is made.

Nat

Reply via email to