My biggest problem with lvalue subs is that they break in the debugger. Subs are intercepted in the debugger by a sub called DB::sub that is not an lvalue sub. So you get weird bugs when a program with lvalue subs that normally works fine is run through a the perl debugger, because values stop getting assigned in the lvalue subs