perl -pi -e 's/replace this/join "", map { ("a" .. "z", "A" .. "Z", 0 .. 9)[rand(62)] } 1 .. 64/eg' example.php
Давайте разберем это на части.
("a" .. "z", "A" .. "Z", 0 .. 9)
- это список, содержащий символы, которые вы хотите видеть в случайной строке.
[rand(62)]
Индексирует приведенный выше список в произвольном месте (используя функцию rand
).62 соответствует количеству элементов в списке.Функция rand возвращает число от нуля до указанного вами числа минус один.К счастью, массивы и списки индексируются начиная с нуля в Perl 5, так что это работает отлично.Таким образом, каждый раз, когда выполняется этот фрагмент кода, вы получаете один случайный символ из списка допустимых символов.
map
принимает блок кода и список в качестве аргументов.Он запускает блок кода и возвращает результат для каждого элемента в списке, переданном ему.Список 1 .. 64
, поэтому блок кода будет выполняться шестьдесят четыре раза.Поскольку в блоке кода содержится код, который генерирует случайный символ, результатом функции map
является шестьдесят четыре случайных символа.
Функция join
принимает разделитель иlist и возвращает список в виде строки, разделенной разделителем (например, join ",", "a", "b", "c"
возвращает "a,b,c"
).В этом случае мы используем пустую строку в качестве разделителя, поэтому она просто создает строку, состоящую из символов в списке (то есть шестьдесят четыре случайных символа).
Теперь мы готовы взглянуть назамена.Он ищет каждый экземпляр (из-за опции /g
) строки "replace this"
и запускает код на стороне замены (из-за опций /e
) и заменяет строку "replace this"
значением последнегооператор, выполняемый на стороне замены (в данном случае возвращаемое значение join
).