Я постараюсь дать интуитивное чувство или ваше логическое выражение, потому что по математике другие авторы делали это очень хорошо.
Ваше логическое выражение должно быть истинным для строк, которые вы хотите сохранить .
- ! PORT означает, что строка не содержит PORT
- ! CORE означает, что строка не содержит CORE
Следовательно, ваше логическое выражение означает сохранить строки, которые в то же время не содержат PORT и не содержат CORE. Очевидно, в вашем файле нет таких строк ...
Вы должны использовать or
, потому что то, что вы действительно хотите выразить, это сохранить строки, которые не содержат как PORT, так и CORE, но, как вы можете видеть, в приведенном выше утверждении есть только одно отрицание. Вы пытаетесь сказать что-то вроде: содержит ли строка PORT, содержит ли она также CORE, тогда я этого не хочу. И это !(/CORE/ && /PORT/)
, и, используя логическую математику, вы также можете написать это /!CORE/||/!PORT/
, как вы видели сами.
Вообще говоря, негативные утверждения трудно понять. Я не единственный, кто это говорит. Например, Дамиан Конвей из Perl Best Practice указал на это и рекомендовал использовать положительные выражения всякий раз, когда это возможно (и использовать unless
оператор Perl вместо if
, если вы хотите отменить условие).