This is based on the example code in perlfunc(1). Faced with writing all that just to get a correct error message on failure, any developer would prefer to encapsulate the code in some routine, called... oh, I don't know, perhaps copy()? Now while File::Copy's interface is not as crufty as system()'s, you still have to check for errors explicitly:my $cmd = "cp $foo $bar"; my $r = system($cmd); if ($r) { if ($? == -1) { die "failed to execute '$cmd': $!\n"; } elsif ($? & 127) { my $msg = sprintf "'$cmd' failed with signal %d, %s coredump\n", ($? & 127), ($? & 128) ? 'with' : 'without'; die $msg; } else { die "'$cmd' exited with value %d\n", $? >> 8; } }
But that's a big improvement for any programmer who wants to be lazy but still write correct code. Others have mentioned the need to use multi-argument system(), otherwise your code will have (perhaps exploitable) bugs when passed filenames containing spaces or shell characters.copy($foo, $bar) or die "cannot copy $foo to $bar: $!";
In reply to Re: File::Copy versus cp/mv
by ed
in thread File::Copy versus cp/mv
by mce
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |