I was having difficulty understanding the parameters passed in to a trigger sub based on the documentation. I can only imagine that others were as well. I've re-written it to help make it hopefully clearer by reducing the usage of passive voice.
=item I<trigger =E<gt> $code>
The I<trigger> option is a CODE reference which will be called after
-the value of the attribute is set. The CODE ref will be passed the
-instance itself and the updated value. If the attribute already had a
-value, this will be passed as the third value to the trigger.
+the value of the attribute is set. The CODE ref is passed the
+instance itself, the updated value, and the original value if the
+attribute was already set.
You B<can> have a trigger on a read-only attribute.