[Perl][Показать все что скрыто] v 0.2
Автор: NopGod 22.12.2016 13:00
Итак, сначала расскажу планы (план?) по поводу серии этих статей. Когда мы доберемся до полноценной версии 1.0 мы уже будем готовы написать полную и надеюсь полезную программу. Решил, что это будет брутфорс для одного замечательного портала, так как он показывает почти всю силу perl. Мало того что мы ее напишем, мы будет понимать как она работает и вы уже сможете написать по аналогии брутфорс для любой кофеварки. Напомню, что брутфорс это грубо говоря перебор паролей в лоб.
Мы уже знаем немного о функциях, теперь посмотрим что такое циклы. ЦыклЪ сука... нужный. Без него просто никуда, так что стоит заострить внимания и попытаться максимально понять как же он работает.
Для начала патыкаем пальцем в следущие простые циклы:
if EXPR
unless EXPR
while EXPR
until EXPR
Где EXPR это какое то вырожение, например, $i>0 (читается как "переменная $i больше нуля"), это вырожение вернет true(труЪ) или false (ложь). В зависимости от модификатора (if, unless, while, until) решается что делать дальше.
if
Сразу покажу пример:
if ($i>0) {
print "$i больше нуля";
}
Строчка "if ($i>0) {" читается как "если переменная $i больше нуля, то выполнить следующий код". Думаю тут все просто и понятно. Как говорило раньше, перл гибкий в оформлении язык и этот же код можно написать подругому:
if ($i>0) {print "$i больше нуля"}
или
print "$i больше нуля" if $i>0;
В первом примере пробущен знак ";" после выражения с print. Это не будет ошибкой и код выполнится как надо, дело в том, что последняя строчка в блоке { ... } может освобождаться от этого бремени. Но советую ставить знак всегда, потому что легко запутаться и пропустить этот знак. Второй пример более читаем мне кажется, нет лишних скобок и всяких блоков которые напоминают бейсик в школе. Если нужно короткое и емкое выражение, лучше брать второй пример.
unless
Это обратное явление модификатора if. Читается оно как "если не". Выражение выполняется если в условии находится НЕ правда:
$i = 1;
print "$i НЕ больше 5" unless $i > 5;
То есть, это полная противоположность модификатору if.
while
Модификатор "пока", пока в условии правда, то выполняется выражение:
$i = 1;
print $i++ while $i # Результат: 1234
Думаю все понятно, сначала $i увеличивается на единицу и проверяется не меньше ли оно 5, если меньше, то выражение повторяется и к $i прибавляется еще единица.
until
Обратное модификатору while. Вырожение выполняется пока в условии ложь:
$i = 1;
print $i++ until $i > 5; # Результат: 12345
Здесь в результат будет входить 5, потому что вырожение 5 > 5 возвращает ложь (что логично) и следовательно вся лобуда с print $i++ повторится еще раз.
Циклы с блоками
Тут уже надо все таки вернутся к школьному бейсику (если знаете/помните) и блок схамам. Самый простой пример мы уже рассмотрели:
if ($i>0) {print "$i больше нуля"}
Здесь блоком будет все что находится в {}, а условие находтся в (). Есть так же логическое продолжение этого выражения:
if ($i>0) {print "$i больше нуля"} else {print "$i НЕ больше нуля"}
Все выражение можно озвучить так: Если $i больше нуля, то печатается строчка "$i больше нуля", иначе печатается строчка "$i НЕ больше нуля".
Все предельно просто :)
Ну и задачка в тему. Какой результат будет у программы и какие ошибки допущены в коде?
#!/usr/bin/perl
$i=1;
if $i>1 {
$i++
print "$i=1";
}
{
print "$i не 1";
}
Ответы на форум - http://rudvs.org.ru/forum/index.php?topic=47.0