Mason apparently wraps your code in a sub (like mod_perl does). That means you end up with something like
$ perl -we'sub { my $x; sub sortAll { $x } }'
Variable "$x" is not available at -e line 1.
The explanation is long as complicated, but it boils down to: Perl doesn't support nested named subs. Attempting to do so leads to weird errors.
Might I suggest you use local our $x;
instead of my $x;
in this situation?