Я все время вижу ключевое слово «my» перед именами переменных в примерах сценариев Perl в Интернете, но я понятия не имею, что это означает. Я пробовал читать справочные страницы и другие сайты в Интернете, но мне трудно понять, для чего это нужно, учитывая разницу между тем, как я вижу его использование, и руководством.
Например, он используется для получения длины массива в этом посте: Найти размер массива в Perl
Но в инструкции сказано:
My объявляет перечисленные переменные локальными (лексически) по отношению к включающему блоку, файлу или eval. Если указано более одного значения, список должен быть заключен в круглые скобки.
Что он делает и как его используют?
perl
scope
declaration
Кулак ярости
источник
источник
my
никак не повлиял на это. Это скалярный оператор присваивания (=
), который применяет скалярный контекст@arr
.Ответы:
my
ограничивает область действия переменной. Область видимости переменной - это то, где ее можно увидеть. Уменьшение области видимости переменной до того места, где она необходима, является фундаментальным аспектом хорошего программирования. Это делает код более читаемым и менее подверженным ошибкам, а также дает множество преимуществ.Если вы не объявите переменную using
my
, вместо нее будет создана глобальная переменная. Этого следует избегать. Использованиеuse strict;
сообщает Perl, что вы не хотите неявно создавать глобальные переменные, поэтому вы всегда должны использоватьuse strict;
(иuse warnings;
) в своих программах.Связанное чтение: Зачем использовать
use strict;
иuse warnings;
?источник
var
иlet
в JavaScript. Без'use strict';
JS вы сможете объявлять новые глобальные переменные без какого-либо ключевого слова, что не считается лучшим методом.let
иvar
делает и как их использовать?» И да, ответ будет примерно таким же. (let
Вары JS очень похожи наmy
вары Perl , за исключением того, чтоlet
вары не могут быть захвачены.)use strict;
? Но вопрос был не в этом, и делоuse strict;
не в этом. Или, может быть, вы хотели сообщить, чтоmy
ограничивает объем vars вроде какlet
иvar
делает, но это в значительной степени первое предложение ответа. 3) Если вы хотите ответить на вопрос по-другому, для этого нужны ответы.Краткое резюме:
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 ).
источник
our
: stackoverflow.com/questions/845060/…my
, но затем дополните его предложением, в котором говорится,local
как если бы вы только что продемонстрировалиlocal
использование, несмотря на то, чтоlocal
это нигде не демонстрируется в этом ответе. Я думаю, что вы неправильно процитировали исходный код PerlMonks, в котором есть два примера кода. Предложение оlocal
описывало другое, а не то, которое вы здесь расшифровали.Частные переменные через my () - это основная документация для
my
.В указанном вами примере размера массива он не используется для определения размера массива. Он используется для создания новой переменной для хранения размера массива.
источник