Как использовать ключевое слово "my" в Perl?

Я продолжаю видеть ключевое слово "мое" перед именами переменных в примерах сценариев Perl в Интернете, но я понятия не имею, что это значит. Я пробовал читать страницы руководства и другие сайты в Интернете, но мне трудно понять, что это такое, учитывая разницу между тем, как я вижу это и руководство.

Например, его используется для получения длины массива в этом сообщении: Найти размер массива в Perl

Но в руководстве написано:

A мой объявляет перечисленные переменные локальными (лексически) включающий блок, файл или eval. Если указано более одного значения, список должен быть помещен в круглые скобки.

Что он делает и как он используется?

Ответ 1

my ограничивает scope переменной. Область видимости переменной - там, где ее можно увидеть. Сокращение области переменных, где требуется переменная, является фундаментальным аспектом хорошего программирования. Это делает код более читабельным и менее подверженным ошибкам, а также приводит к множеству полученных преимуществ.

Если вы не объявляете переменную с помощью my, вместо нее будет создана глобальная переменная. Этого следует избегать. Использование use strict; говорит Perl, что вы хотите предотвратить неявное создание глобальных переменных, поэтому вы всегда должны использовать use strict;use warnings;) в своих программах.


Связанные чтения: Зачем использовать use strict; и use warnings;?

Ответ 2

Краткая сводка: 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).

Ответ 3

Частные переменные через my() являются основной документацией для my.

В приведенном ниже примере размера массива он не используется для определения размера массива. Он использовал для создания новой переменной для хранения размера массива.