"In other words: why does CGI.pm permit upload(garbage) to not be undef with a POST, while it does enforce it with a GET?"
POST requests include a content body in the request headers, GET requests do not.
Here's a link that you may find useful
Difference between GET and POST.
LR
Whip me, Beat me, Make me use Y-ModemG.