Вам нужно прочитать документацию на $?в перлвар .Это значение:
Состояние, возвращаемое последней командой закрытия канала, командой backtick ("` `"), успешным вызовом wait () или waitpid () или оператором system ().
Ваш призыв к копированию (предположительно из File :: Copy) не относится ни к одной из этих категорий, так что $?не установлен.
Однако, если вы прочитаете документацию для File :: Copy , вы увидите, что все его функции «возвращают 1 в случае успеха, 0 в случае неудачи».Таким образом, вы можете значительно упростить свой код.
#!/usr/bin/perl
use strict; use warnings;
use File::Copy;
if (copy('notthere', 'somewhere else')) {
warn "success\n";
} else {
warn "failure: $!\n";
}
Обратите внимание, что я использовал «предупреждение», а не «печать», чтобы ошибки передавались в STDERR.Обратите внимание также на использование $!для отображения ошибки операционной системы.Это, конечно, может быть опущено, если это не достаточно удобно для пользователя.