Функция grep
действует как фильтр в списках.
В этом случае список состоит из буквенно-цифровых символов.
Фильтр определяется регулярным выражением. !
обозначает not
. Другими словами, результирующий список должен исключать любые элементы, соответствующие регулярному выражению.
Регулярное выражение пытается сопоставить любое вхождение 0o1Iil]
(не 0o1Iil
, потому что пропуск [
в начале набора не позволит регулярному выражению видеть ]
как класс символов метасимвол.
grep {not /0o1Iil]/} 0..9, A..Z, a..z
(без учета [
):
Поскольку в списке 0..9, A..Z, a..z
нет вхождения 0o1Iil]
, нет элементов для фильтрации, поэтому вы получаете весь список буквенно-цифровых символов.
grep {not /[0o1Iil]/} 0..9, A..Z, a..z
(с [
):
Все элементы в списке, соответствующие 0
, o
, 1
, I
, i
или l
, будут отфильтрованы. Таким образом, вы получите обратно алфавитно-цифровой список, без вышеупомянутых шести символов.