I think it's almost always better to use the perl builtin or a module than a system call. First, it makes your code more portable. What if the script needs to be run on an OS without a "mv" command? Second, it's probably a bit easier to do error handling when calling a perlfunc than having to trap (and sometimes fiddle with) the return value of system. Given the plethora of great modules such as Archive::Tar
, etc. I find that I very rarely need to do a system call. There are times when you need to call an OS specific or some other 3rd party program but I find those times to be very rare.
Whenever I find myself using system I always ask myself "Self, is there an all-perl way to do this?" It's saved me time more than once when I had to port the script to a different OS.