Как мне использовать ключевое слово «my» в Perl?

56

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

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

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

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

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

  • 3
    Re "его использовали для получения длины массива в этом посте", совсем нет. my не учитывал это ни в малейшей степени. Это скалярный оператор присваивания ( = ), который применяет скалярный контекст в @arr .
  • 0
    Если это не совсем «твое», вы не должны его использовать.
Теги:
scope
declaration

3 ответа

96
Лучший ответ

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

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


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

  • 9
    Наконец ответ, который объясняет почему .
16

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

  • 0
    Хотите объяснить «их»? Я всегда находил это запутанным.
  • 0
    @rdodev: Что ты имеешь в виду?
Показать ещё 5 комментариев
3

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню