in reply to copy - Inappropriate ioctl for device

Checking $! is misleading. File::Copy docs show example you need to follow
copy("file1","file2") or die "Copy failed: $!";
There is no need for eval because copy won't die on failure.

Replies are listed 'Best First'.
Re^2: copy - Inappropriate ioctl for device
by wol (Hermit) on Feb 10, 2009 at 16:31 UTC
    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();