Perl copy vs system cp

What are the pros & cons, if any, between using Perl's copy module vs OS's system cp, for copying a file to another directory? Or are they exactly the same?

1) Perl's File::Copy module, as in

  
copy ($filename, $dest_path) or die "ERROR: Cannot copy\n";

2)

if (system ("cp $filename, $dest_path") != 0) {
  <do something>;
} else {
  print "ERROR: Cannot copy\n";
}

PS. Sorry if this is already discussed in other/older threads.

Thanks.

The one thing I can see from your example is that the system call won't work if the files have spaces in the names but File::Copy will. That could easily be fixed but it is something you have to take into account.

Staying within Perl will probably mean that another process is not forked. The 'system' call always forks another process. That can be an advantage or a disadvantage depending on the behaviour you desire. For instance, if you wanted to copy ten files but didn't wish to wait for completion, the 'cp's could be forked asynchronously.

IMO the best argument for not using a system utility if there's an equivalent Perl-based solution: portability. File::Copy will work on any system that can run Perl. cp won't work on any platform where the file duplication utility isn't called that.

Related to this thread but slightly unrelated to this ...

when using system command ( if that is unavoidable in some scripts, I know there are equivalents for almost everything ), always use the absolute path of the command like /bin/cp and not just cp

cp could be simply aliased to something else and you are not executing 'cp' but something else.