Глава 8: Функции.
8.7 Создаваемые операцией my() переменные файлового уровня
Операцию my() можно также использовать на внешнем уровне программы, вне всех подпрограмм и блоков. Хотя в результате не будет получена "локальная" переменная в описанном выше смысле, это может оказаться достаточно полезным, особенно при использовании в сочетании с Реrl-прагмой*
use strict;
* Прагма — это директива компилятора. Среди этих директив — директивы задания целочисленных арифметических операций, перегрузки числовых операций, запрашивания дополнительных текстовых предупреждений и сообщений об ошибках. Эти директивы описаны в главе 7 книги Programming Perl и на man-странице perlmodlib(l).
Если поставить эту прагму в начало файла, то вы больше не сможете использовать переменные (скалярные, массивы и хеши), сначала не "объявив" их. Объявляются они с помощью операции my() следующим образом:
use strict;
my $а; # сначала значение undef
my @b = qw(fred barney betty); # присвоить начальное значение
push @b, qw(wilma); # разве можно забыть про Вильму?
@с = sort @b; # HE КОМПИЛИРУЕТСЯ
Во время компиляции последний оператор будет помечен флагом ошибки, потому что он обратился к переменной, не объявленной ранее с помощью операции my (т.е. @с). Другими словами, ваша программа даже не начнет работать до тех пор, пока не будут объявлены все используемые переменные.
Ваши программы будут работать несколько быстрее (обращение к переменным, созданным с помощью my, производится несколько быстрее, чем к обычным переменным).*
Гораздо быстрее будут выявляться ошибки набора, потому что вы больше не сможете случайно обратиться к несуществующей переменной $freed, когда вам будет нужна переменная $fred. По этой причине многие программысты, пишущие на Perl, автоматически начинают каждую новую программу прагмой use strict.
* "Обычная переменная" в этом случае — переменная пакета (поэтому $х — это, по сути дела, $main:: х). Переменные, созданные с помощью my (), ни в один пакет не входят.