port upgrade packagename is the correct form, yes.
But I think that in this case it is a little more complicated.
Take a look at perl5 portfile . This is a shell that just depends on perl 5.8. If you are simple sudo port upgrade perl5, this will not lead you to 5.12. However, the perl5 package has several options for 5.10 and 5.12. You should see all this locally with port variants perl5.
That I'm not sure if you can pass option flags ( +perl5_12in this case) to port upgrade, or you need to make a new one port installon top of the current installation. Or even, horror horror, uninstall the current package before installing the option.
The whole version of the mechanism was a mistake, IMHO. An interesting and useful experiment, but one of which we learned was a bad idea.
EDIT: , ; , :
sudo port deactivate perl5
sudo port install perl5 +perl5_12