Отключить предупреждение о буквальных запятых в списке qw

my @flavors = qw/sweet,sour cherry/;

дает "Возможную попытку разделить слова запятыми" - как я могу отключить это предупреждение в случаях, когда мне нужны буквальные запятые?

Ответ 1

Отключить warnings локально:

my @flavors;
{
    no warnings 'qw';
    @flavors = qw/sweet,sour cherry/;
}

ОБНОВЛЕНИЕ: Или выделите их запятыми:

my @flavors = ('sweet,sour', qw/cherry apple berry/);

Ответ 2

Вы можете использовать no warnings 'qw';.

my @x = do {
   no warnings qw( qw );
   qw(
      a,b
      c
      d
   )
};

К сожалению, это также отключает предупреждения для #. Вы могли бы # отметить комментарий, чтобы удалить необходимость в этом предупреждении.

use syntax qw( qw_comments );

my @x = do {
   no warnings qw( qw );
   qw(
      a,b
      c
      d   # e
   )
};

Но довольно глупо отключать это предупреждение. Легче просто избежать этого.

my @x = (
   'a,b',
   'c',
   'd',   # e
);

или

my @x = (
   'a,b',
   qw( c d ),  # e
);

Ответ 3

Просто не используйте qw//, а одно из множества других операторов цитирования, в сочетании с split. Как звучит q//?

my @flavours = split ' ', q/sweet,sour cherry/;

qw// - это просто полезный ярлык, но его никогда не нужно использовать.

Ответ 4

В случае, когда я разрабатывал фреймворк, где списки разделенных запятыми ключевых слов были довольно распространенными, я решил хирургически подавить эти предупреждения в обработчике сигналов.

$SIG{__WARN__} = sub {
    return 
        if $_[0] =~ m{ separate words with commas };
    return CORE::warn @_;
};