Eh!? You can't say that eval is unnecessary on the grounds that it won't die, and in the same breath suggest a solution that does die and doesn't catch it with eval! (Unless maybe it's a Zen thing.)
In order to avoid eval, and also do what the OP wanted in the error case, how about:
use strict;
use warnings;
use File::Copy;
my $source = "velocity.log";
my $target_input_file = "/tmp/not/there";
copy("$source" ,"$target_input_file") or do {
open(FAIL,">>error.log");
print FAIL "FAILED TO Copy \"$source\" TO \"$target_input_file
+\" +....\n";
close(FAIL);
}
Of course, this still doesn't directly answer the question as to why the error message "Inappropriate ioctl for device" pops up. For that part, I wouldn't expect that $! (aka errno) would be set as a side efect of the copy function or the eval. Maybe it's a side effect of something earlier in the program?
The acid test: does the file get copied?
--
use JAPH;
print JAPH::asString();
|