Unfortunately, "the" shell is everything but a single, consistent definition. Perl invokes the default shell, which can and does vary wildly from platform to platform and from system version to system version.
- Improve pipe open? and especially Re^4: Improve pipe open? (redirect hook)
- Re: Ssh and qx
- Re^2: open with pipe
- Re^2: system(cp filenamewithspaces newplace/newname)
Of course, simply appending a space and an ampersand to a shell command to make the shell start a "background" process is not portable. Even on shells that support backgrounding, it might not work due to pipes or the like used in the command.
And finally, shelling out to start curl just wastes time and resources. Perl can do HTTP requests just fine thanks to LWP::UserAgent, Net::HTTP::Client, and various other modules. Plus, there are at least three modules that use libcurl as backend: Net::Curl, WWW::Curl, and LWP::Curl.
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)