Новичку полезно

  • А знаете ли вы что?

    - rudvs даст вам прохладу, влажность и, скорее всего, силу земли!


[Perl][Показать все что скрыто] v 0.2

Теги: перл, perl, учебник, цикл, информация, программирование

Итак, сначала расскажу планы (план?) по поводу серии этих статей. Когда мы доберемся до полноценной версии 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

Добавить комментарий


Обновить