I am interested to the answer to this question, too, as I am also working on OS X.
When I use the shell command "open" I always supply an argument that is a document file name, not an application file name. This causes the application bound to the file to be opened. That may be part of your problem.
Another issue would be the current path. Your perl script can change the current working directory using function "chdir", which might help.
Then there is your PATH environment variable. If any of the applications are in directories specified using a relative path, your CWD will certainly affect whether the app can be found.
I'm using absolute paths. I also copied my code directly into the Terminal and it loaded the myapp.app fine. Also, the code runs fine if I run the main executable. It only has an issue when I run the .app folder. The .app folder must put some kind of lock on the main executable.