Perl에서 "my"키워드를 어떻게 사용해야합니까?


90

온라인 예제 Perl 스크립트에서 변수 이름 앞에 "my"키워드가 계속 표시되지만 그게 무슨 뜻인지 모르겠습니다. 매뉴얼 페이지와 다른 사이트를 온라인으로 읽으려고했지만 사용 방식과 매뉴얼의 차이를 고려할 때 그것이 무엇인지 식별하는 데 어려움이 있습니다.

예를 들어,이 게시물에서 배열의 길이를 가져 오는 데 사용됩니다. Perl에서 배열의 크기 찾기

그러나 매뉴얼은 다음과 같이 말합니다.

my는 나열된 변수를 둘러싸는 블록, 파일 또는 평가판에 대해 (어휘 적으로) 로컬로 선언합니다. 둘 이상의 값이 나열되면 목록을 괄호 안에 넣어야합니다.

무엇을하고 어떻게 사용합니까?


3
다시 "이 게시물에서 배열의 길이를 얻는 데 사용되었습니다", 전혀 아닙니다. my최소한 그것을 고려하지 않았습니다. =에 스칼라 컨텍스트를 적용한 것은 스칼라 할당 연산자 ( )입니다 @arr.
ikegami

실제로 "당신의 것"이 아니라면 사용하지 말아야합니다.
icenac

답변:


140

my변수 의 범위 를 제한합니다 . 변수의 범위는 볼 수있는 곳입니다. 변수의 범위를 변수가 필요한 곳으로 줄이는 것은 좋은 프로그래밍의 기본 측면입니다. 이를 통해 코드를 더 읽기 쉽고 오류 발생 가능성이 적어 많은 파생 이점을 얻을 수 있습니다.

를 사용하여 변수를 선언하지 않으면 my대신 전역 변수가 생성됩니다. 이것은 피해야합니다. 를 사용하면 use strict;Perl이 암시 적으로 전역 변수를 생성하지 못하도록하므로 프로그램에서 항상 use strict;(and use warnings;)를 사용해야 합니다.


관련 자료 : use strict;그리고 use warnings;?


11
마지막으로 이유 를 설명하는 대답 .
ThisSuitIsBlackNot

JS에서 오는 사람들을 위해 : 본질적 으로 JavaScript var와 비슷 let합니다. 'use strict';JS가 없으면 키워드없이 새 전역 변수를 선언 할 수 있으며 이는 모범 사례로 간주되지 않습니다.
Electric Coffee

@Electric Coffee, JS 용어로 "무엇을 let하고 무엇 을 var해야하며 어떻게 사용해야합니까?" 그리고 네, 대답은 거의 같을 것입니다. (JS의 let변수는 변수를 캡처 할 수 없다는 my점을 제외하면 Perl의 변수 와 매우 유사 let합니다.)
ikegami

단지 사람들이 JS에서 Perl로왔다면 동일한 개념을 설명하는 쉬운 방법이 될 것임을 의미했습니다
Electric Coffee

@ElectricCoffee 1) 범위 지정을 이해하는 프로그래머는 언어 전환 후 다시 설명 할 필요가 없습니다. 2) JS 프로그래머가 이해하거나 달리 이해하는 측면에서 실제로 범위 지정을 설명했는지 확실하지 않습니다. 설명하려고 use strict;했나? 그러나 그것은 문제가 아니었고 use strict;그 이상을 수행합니다. 아니면 당신은 의사 소통을 의미 my의 범위가 좀처럼 바르 한계 letvar수행을하지만 거의 대답의 첫 문장이다. 3) 질문에 다르게 답하고 싶은 경우 답변이 필요합니다.
ikegami

27

요약 : my새 변수를 만들고 local일시적으로 변수 값을 수정합니다.

아래 예에서 $ :: a는 'global'네임 스페이스의 $ 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

최신 정보

차이 소개 ourmy참조하시기 바랍니다

( ThisSuitIsBlackNot에 감사드립니다 ).


'그들의'를 설명할까요? 난 항상 그게 혼란 스러워요.
rdodev

@rdodev : 무슨 말씀 이시죠?
Igor Chubin 2014 년

나는 계속해서 'my'와 'their'로 펄 코드를보고 있고 실제로 그 차이를 이해하지 못했다.
rdodev

@rdodev : 일부 코드에 대한 링크를 보내 주 their시겠습니까?
Igor Chubin 2014 년

3
@rdodev 나는 당신이 의미한다고 생각합니다 our: stackoverflow.com/questions/845060/…
ThisSuitIsBlackNot

4

my ()를 통한 전용 변수my.

언급 한 배열 크기 예제에서는 배열의 크기를 찾는 데 사용되지 않습니다. 배열의 크기를 유지하기 위해 새 변수를 만드는 데 사용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.