Ваше выражение лица
open F, $f || die "Cannot open $f: $!";
У
есть небольшая ошибка, которая в конечном итоге укусит вас, хотя, вероятно, не сегодня.
Оператор ||
имеет более высокий приоритет, чем оператор запятой слева от него, поэтому это выражение фактически анализируется как
open F, ($f || die "Cannot open $f: $!")
То есть, вы будете die
, когда $f
имеет ложное (0, ""
или undef
) значение, а не тогда, когда инструкция open
не сможет открыть файл с заданным именем $f
.
Чтобы сделать то, что вы имеете в виду, вы можете использовать круглые скобки:
open (F, $f) || die ...
или используйте альтернативный оператор с низким приоритетом or
open F, $f or die ...
( Иногда я сам себя укусил )