Я продолжаю видеть ключевое слово "мое" перед именами переменных в примерах сценариев Perl в Интернете, но я понятия не имею, что это значит. Я пробовал читать страницы руководства и другие сайты в Интернете, но мне трудно понять, что это такое, учитывая разницу между тем, как я вижу это и руководство.
Например, его используется для получения длины массива в этом сообщении: Найти размер массива в Perl
Но в руководстве написано:
A мой объявляет перечисленные переменные локальными (лексически) включающий блок, файл или eval. Если указано более одного значения, список должен быть помещен в круглые скобки.
Что он делает и как он используется?
my
ограничивает scope переменной. Область видимости переменной - там, где ее можно увидеть. Сокращение области переменных, где требуется переменная, является фундаментальным аспектом хорошего программирования. Это делает код более читабельным и менее подверженным ошибкам, а также приводит к множеству полученных преимуществ.
Если вы не объявляете переменную с помощью my
, вместо нее будет создана глобальная переменная. Этого следует избегать. Использование use strict;
говорит Perl, что вы хотите предотвратить неявное создание глобальных переменных, поэтому вы всегда должны использовать use strict;
(и use warnings;
) в своих программах.
Связанные чтения: Зачем использовать use strict;
и use warnings;
?
Краткая сводка: my
создает новую переменную, local
временно изменяет значение переменной
В приведенном ниже примере $:: a ссылается на $a в глобальном пространстве имен.
$a = 3.14159;
{
my $a = 3;
print "In block, \$a = $a\n";
print "In block, \$::a = $::a\n";
}
print "Outside block, \$a = $a\n";
print "Outside block, \$::a = $::a\n";
# This outputs
In block, $a = 3
In block, $::a = 3.14159
Outside block, $a = 3.14159
Outside block, $::a = 3.14159
т.е. local
временно изменяет значение переменной, но только внутри области, в которой она существует.
Источник: http://www.perlmonks.org/?node_id=94007
Обновление
О различии между our
и my
см.
(Благодаря ThisSuitIsBlackNot).
Частные переменные через my() являются основной документацией для my
.
В приведенном ниже примере размера массива он не используется для определения размера массива. Он использовал для создания новой переменной для хранения размера массива.
my
не учитывал это ни в малейшей степени. Это скалярный оператор присваивания (=
), который применяет скалярный контекст в@arr
.