среда, 5 декабря 2007 г.

Ответы на Prel'овые вопросы

Что то я совсем забросил мой список с вопросами. Тем более там есть совсем простой вид вопросов на понимание perl кода. На эти вопросы я сегодня и отвечу.



10)Что напечатает программа?
#!/usr/bin/perl
$a = "0";
if ($a) {
print "A";
} else {
print "B";
}



Ответ: Программа напечатает "B" т.к. при использовании конструкции if ($a) будет проверяться не только существование переменной $a, но и ее не нулевое значение, более того, если переменная является строкой, то интерпретатор попытается перевести ее число.



15) то напечатает программа?
#!/usr/bin/perl
$what = "bird";
$sentence = "Every good bird does fly.";
if ($sentence =~ /\b$what\b/) {
    print "The sentence contains the word $what!\n";
} else {
  print " The sentence not contains the word $what!\n";
}



Ответ: Программа напечатает " The sentence contains the word bird!" т.к. при проверке регулярным выражением if ($sentence =~ /\b$what\b/) проверяется наличие в строке слова bird (переменной $what стоящей между пробелами).




22) Чему равно $1 после выполнения?
#!/usr/bin/perl
$title = "Happy new 2007 year";
$title =~ m/^.*(\d+) year$/;


"Happy new"? "appy new 2007"? "Happy new 2007"? "2"? "7"? "2007"?
Ответ: Программа напечатает "7" т.к. в регулярном выражении ($title =~ m/^.*(\d+) year$/;) задан поиск последней цифры в троке перед словом year. Опция m - Многострочный режим, позволяющий находить совпадения в начале или конце строки, а не всего текста.


Пока все. КонецЪ Связи.


 

4 комментария:

Vlad комментирует...

не спец в perl (и не проверял): но имхо она напечатет A
т.к. "A" это строка

Анонимный комментирует...

Во втором примере цифра 7 будет по причине прожорливости (по умолчанию в перле) шаблона .* который оставит для шаблона \d+ всего один символ 7.

Анонимный комментирует...

Опция m - это не многострочный режим, а оператор сравнения - m// См. man perlop, секция Regexp Quote-Like Operators. А многострочный режим - это m после паттерна - =~ m/.../m.

deniszh комментирует...

2 vlad - напишет действительно "B", так как в Perl значение "0" в if приведется к 0, а 0 - это false.