Except of course that File::Copy::copy will take three arguments, and that's documented as well.
But since File::Copy::copy is usually promoted as "Perl's replacement for cp", people will expect it to behave as cp. And not study the documentation carefully.
You for instance either didn't study the documentation carefully, or if you did, forgot it. Because you wrongly assumed File::Copy::copy only takes two arguments. Now your mistake isn't as costly as forgetting the meaning of the third parameter. But if you can forget File::Copy::copy having a third parameter, you might as well forget that File::Copy::copy acts the same as cp when given two arguments, but very, very different when given three.
use File::Copy;
my @files1 = qw [foo];
my @files2 = qw [bar baz];
my $dir = "/tmp";
copy @files1, $dir; # No problem.
copy @files2, $dir; # File::Copy will warn, but erase 'baz' anyw
+ay.
Now had you used your systems 'cp', it would have copied all three files into /tmp.
And had you used an all numeric $dir in the above code fragment, File::Copy::copy would have overwritten baz without so much as a warning. |