Все задачи

ABC

23 Mar 2013
Read this article in English: here.

Что получится, если запустить этот скрипт на выполнение?

#!/usr/bin/perl

use strict;

$a = 1;
$b = 2;
$c = 3;

print $a+$b+$c, "\n";

Подсказка-1

Показать

Обратите внимание на use strict

Подсказка-2

Показать

Нехорошо использовать переменные, не объявив их через my или our

Подсказка-3

Показать

В скрипте целых 3 необъявленных переменных. Конечно же, скрипт не пройдет синтаксический анализ! Но на какой строчке компиляция сломается?

Подсказка-4

Показать

>perl abc.pl
Global symbol "$c" requires explicit package name at abc.pl line 7.
Global symbol "$c" requires explicit package name at abc.pl line 9.
Execution of abc.pl aborted due to compilation errors.

Подсказка-5

Показать

sort { $a <=> $b } @array;

Разоблачение

Показать

$a и $b – глобальные переменные, объявленные для функции sort самим перлом. Поскольку $a и $b объявлены, синтаксический анализатор пропустит их, и выдаст ошибку на $c.

Мораль: всегда используйте прагму strict, объявляйте все переменные с помощью операции my или (если очень надо) our. А использование переменных $a и $b вне функции sort не приводит ни к чему хорошему.