воскресенье, 20 сентября 2015 г.

Особенность использования warn, die с "\n"

perl v5.18.2

Поведение warn с использованием символа новой строки "\n":

test.pl
warn "Hello";
warn "World\n";
warn "Wor\nld";

perl test.pl
Hello at m.pl line 4.
World
Wor
ld at m.pl line 6.

Для случая с die результат аналогичен: die "Goodbye"; напечатает:
Goodbye at test.pl line 4

А die "Good\nbye"; выдаст это:
Good
bye at test 4

Поэтому, чтобы не было недоразумений, лучше вообще не использовать "\n" в данных функциях.

2 комментария:

  1. Честно говоря, не поняла, какая может быть опасность в использовании "\n". Это ведь его нормальное поведение, и наоборот, иногда бывает очень полезно, чтобы сделать текст в логах более удобно-читаемым.

    М.б. просто стоит попробовать использовать не двойные, а одинарные кавычки, чтобы вывод стал более предсказуемым?

    ОтветитьУдалить
    Ответы
    1. Опасности, как таковой, может и нет (пример по крайней мере привести не могу на данный момент), но вот некоторые недоразумения при использовании "\n" в конце сообщений в функциях warn, die могут иметь место. В качестве примера можно рассмотреть такой банальный случай:

      test.pl

      open STDERR, ">", 'err.log' or die "Error: $!";

      warn "Обратить внимание!\n";
      warn "Обратить внимание!";

      close STDERR;

      err.log
      Обратить внимание!
      Обратить внимание! at /path/test.pl line 4.

      И при использовании такого инструмента, как grep, и шаблона для поиска "line" (grep -n "line" err.log), мы не получим все упоминания о предупреждениях.

      Поэтому, просто нужно быть бдительным в данном отношении и быть готовым к подобным особенностям, если уж возникла необходимость в "\n".

      Удалить