(You could have replaced the above with the one-liner
return $_SHARED{myquote}->($_[0]); at
the expense of readability.)

For security reasons, PL/Perl executes functions called by any
one SQL role in a separate Perl interpreter for that role. This
prevents accidental or malicious interference by one user with
the behavior of another user's PL/Perl functions. Each such
interpreter has its own value of the %_SHARED variable and other global state. Thus,
two PL/Perl functions will share the same value of %_SHARED if and only if they are executed by the
same SQL role. In an application wherein a single session
executes code under multiple SQL roles (via SECURITY DEFINER functions, use of SET ROLE, etc) you may need to take explicit steps
to ensure that PL/Perl functions can share data via %_SHARED. To do that, make sure that functions
that should communicate are owned by the same user, and mark them
SECURITY DEFINER. You must of course
take care that such functions can't be used to do anything
unintended.