in reply to Substituting method from object

If you don't use /e modifier, it will not evaluate $user->get_error_string as an expression, which means it will not make the get_error_string function call for you.

However it does resolve $user to its value, which is HASH(ox91e14) in this case.

Hope this remove the confusion may rise. It does not evaluate the right side as expression, but does resolve the value of each valuable before substitution happens.

One more example:
$a = "Is this a bug?"; $a =~ s/bug/$& x 2/; print $a; # Is this a bug x 2? $a = "Is this a bug?"; $a =~ s/bug/$& x 2/e; print $a; # Is this a bugbug?
In both case, $& is resolved to 'bug', but only in the second case, x is taken as an operator.