perl 에서 my 와 our 의 차이 분석

2809 단어 myour
perl 에서 our 의 용법 require 5.006 은 버 전 번호 가 5.006 보다 적 을 때 실 패 를 되 돌려 모듈 로 딩 에 실 패 했 습 니 다.그래서 모듈 이 환경 을 호출 하 는 Perl 버 전 을 확보 하 는 역할 을 합 니 다.
our 는 my 와 마찬가지 로 변수 에 대한 성명 이지 만 our 는 전체 변 수 를 포함 하고 my 는 품사 변 수 를 설명 합 니 다.
그러나 our 성명 의 변 수 를 통 해 그것 은 하나의 품사 변수 처럼 변 할 것 이다.사실은 이것 도 our 가 존재 하 는 목적 이다.strict pragma 를 속 이 고 strict 로 하여 금 그것 이 품사 변수 라 고 생각 하 게 하 는 것 이지 사실은 그렇지 않다.
our:1 을 이해 할 수 있 는 간단 한 방법 이 있 습 니 다.our 성명 의 변 수 를 my 성명 과 똑 같이 생각 하 세 요.2.our 와 my 의 차 이 를 기억 하 세 요.our 는 패키지 전역 변 수 를 설명 하기 때문에 기호 표 에 저장 합 니 다(모든 곳 에서 접근 할 수 있 습 니 다).my 는 진정한 품사 변 수 를 설명 하고 닫 힌 블록 에서 만 접근 할 수 있 습 니 다.
코드 예

my $var = 1;

{
    my $var = 2;
    print $var, "
";
}

print $var, "
";

출력:
2
1

our $var = 1;

{
    our $var = 2;
    print $var, "
";
}

print $var, "
";

출력:
2
2perl 에서 our 의 용법 은 사실 our 의 등장 은 그의 역 사 를 가지 고 있 습 니 다.Perl 은 다른 언어 와 달리 변 수 를 마음대로 설명 할 수 있 습 니 다.Perl 4 시대 에 my 같은 것 이 필요 하지 않 습 니 다.이름 을 마음대로 쓰 면 변수 입 니 다.Perl 5 에 서 는 여전히 이와 같 습 니 다.my 로 문법 변 수 를 명확 하 게 밝 히 지 않 으 면 모든 변 수 는(패키지)전역 변수 이 고 설명 하지 않 고 직접 사용 할 수 있 습 니 다.그러나 이런 나 쁜 점 이 있 습 니 다.만약 에 실수 로 이름 을 잘못 쓰 거나 기 호 를 인용 할 때 문자열 의 연산 이 틀 리 면 많은 번 거 로 움 을 초래 할 수 있 습 니 다.(Perl 5 문법 에 따 르 면 이것 은 모두 정확 하기 때 문 입 니 다.그 결 과 는 새로운 변 수 를 만 드 는 것 입 니 다.이것 은 당신 이 원 하 는 목적 이 아 닙 니 다.)
따라서 이러한 문 제 를 해결 하기 위해 Perl 5 에 strict 와 warnings 두 개의 pragma 를 도입 했다.그들의 역할 은 변 수 를 성명 하지 않 고 직접 사용 하 는 것 을 제한 하 는 것 이다.strict 와 warnings 제한 을 거 친 후에 성명 하지 않 은 직접 사용 하 는 모든 변 수 는 잘못 보고 할 수 있다.그러나 my 성명 의 변 수 는 국부 변수 이 고 local 은 변 수 를 만 들 수 없 기 때문에 우 리 는 전체 변 수 를 사용 할 수 없습니다(주 1).그래서 our 를 도 입 했 습 니 다.our 의 역할 은 전체 변 수 를 설명 하 는 것 입 니 다.그러나 strict 와 warnings 는 이것 이 품사 변수 라 고 생각 하기 때문에 our 성명 의 변수 도 품사 역할 영역 입 니 다.하지만 실제로는 전역 변수 다.
주 1:our 를 사용 하지 않 으 면 전역 변 수 를 만 들 수 있 는 두 가지 방법 이 있 습 니 다.1.no strict"vars"로 strict pragma 를 임시로 끄 고 설명 이 끝나 면 use strict"vars"로 엽 니 다.2.$main:var 또는$foo::bar 와 같은 변수의 전체 한정 이름 을 사용 합 니 다.
------------------------------------------------------------------------------------
usepackageour 세 사람 사이 에는 아무런 관계 가 없다.
use 는.pm 파일 을 불 러 옵 니 다.package 는 현재 이름 공간 을 전환 합 니 다.our 는 현재 이름 공간 에 변 수 를 만 듭 니 다.이 변수 가 존재 한다 면 our 는 하나의 성명 역할 만 합 니 다.
------------------------------------------------------------------------------------
our(또는 아무런 수식 도 없 음)는'패키지 전역 변수'를 설명 합 니 다.'의존'은'패키지'위 에 있 습 니 다.저장 위 치 는'패키지 기호 표'입 니 다.my 는'품사 변수'입 니 다.'의존'은'코드 블록'에 있 고 저장 위 치 는'코드 블록'의'변수 탭'입 니 다.따라서 어법 변 수 는 코드 블록 외 에 접근 할 수 없습니다(전달 참조 제외).그러나 패키지 전역 변 수 는 다 르 기 때문에 전체 한정 으로 접근 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기