LINUX.ORG.RU

История изменений

Исправление outtaspace, (текущая версия) :

if ( ( none { $_ eq "STR_PISTOLS" or 
               $_ eq "STR_RIFLES"  or 
               $_ eq "STR_LAUNCHERS" } @$categories ) or
         ( any { $_ eq "STR_CLIPS" } @$categories ) ) {
        next;
}

У меня люто бомбит от такого кода, пришлось долго приходить в чувства.

В этом примере у нас статично условие, т.е. категории которые перечислены в none и any. Меняется только массив $categories. Если это так, то можно выделить хэш под категории из none и хэш под категории из any. Всё свести к поиску по хэшам, так мы избавимся от медленного громоздкого условия. Еще можно написать функцию, с правильным названием описывающим предметную область, возвращающая булево значение для $categories:

next unless tratata($categories)

Про мемоизацию пока забудем. Выше описано достаточно быстрое и простое решение.

my %tratata = map { $_ => 1 } @{ $categories };

if (exists $tratata{'STR_PISTOLS'}) {
   ...
}

if (exists $tratata{'STR_LAUNCHERS'}) {
    ...
}

Исходная версия outtaspace, :

if ( ( none { $_ eq "STR_PISTOLS" or 
               $_ eq "STR_RIFLES"  or 
               $_ eq "STR_LAUNCHERS" } @$categories ) or
         ( any { $_ eq "STR_CLIPS" } @$categories ) ) {
        next;
}

У меня люто бомбит от такого кода, пришлось долго приходить в чувства.

В этом примере у нас статично условие, те категории которые перечислены в none и any. Меняется только массив $categories. Если это так, то можно выделить хэш под категории из none и хэш под категории из any. Всё свести к поиску по хэшам, так мы избавимся от медленного громоздкого условия. Еще можно написать функцию, с правильным названием описывающим предметную область, возвращающая булево значение для $categories:

next unless tratata($categories)

Про мемоизацию пока забудем. Выше описано достаточно быстрое и простое решение.

my %tratata = map { $_ => 1 } @{ $categories };

if (exists $tratata{'STR_PISTOLS'}) {
   ...
}

if (exists $tratata{'STR_LAUNCHERS'}) {
    ...
}