You missed a ton of issues that cause lots of fun. For instance you sometimes cannot lock a file for unexpected reasons. People often don't check $!, and will take a while to track down that. (People who don't check failure are simply hosed.)
Another biggie is that people close a file while they have locks on it open. This may happen for them unexpectedly (eg they have locked a dbm which closes and opens the file behind their back) or because they don't realize that this loses the lock. (Opening the file on a second filehandle and closing that loses the lock on the first still-open filehandle. So that attempted workaround fails!)
Otherwise useful if basic.