1. Dynamic scoping in Perl

    Perl에서는 Dynmaic scoping 변수를 선언하기 위해서는 local 이라는 키워드를 사용해야한다. 

#in Fighter file

our $coins_to_obtain = 20;
sub obtain_coins{
    my ($self) = @_;

    if ($AdvancedFighter::coins_to_obtain eq $coins_to_obtain ){
        $self->{coins} = sum $self->{coins}, $coins_to_obtain;
    }else{
        $self->{coins} = sum $self->{coins}, $AdvancedFighter::coins_to_obtain;
    }
    
}
# in tournament file

sub update_fighter_properties_and_award_coins{
	local $AdvancedFighter::coins_to_obtain = 20;
    local $AdvancedFighter::delta_attack = -1;
    local $AdvancedFighter::delta_defense = -1;
    local $AdvancedFighter::delta_speed = -1;

}

과제 때 활용한 코드에서는 coins_to_obtain에 local 키워드를 사용하여 이 변수를 다른 파일에서도 사용 할 수 있게 해주었다. 이때 이 변수 데이터가 fighter file의 coins_to_obtain가 구분하기 위하여 앞에 $AdvancedFighter::라는 대응표로 구분 시켜 주었다. 따라서 local 키워드를 사용한 변수들은 다른 파일이든 아니면 다른 함수에서 사용해도 어디에서든 변화 될 수 있고 사용할 수 있다. 즉, dynamic scoping이 적용된 변수는 다른 영역에서도 아무 선언 없이 자유롭게 사용 될 수 있다.

 

2. 장점

local이라는 키워드를 변수에 선언하면 어디서든 자유롭게 사용 가능하다.

 

 

3. 단점

해당 변수를 여기저기서 사용할 경우 어떻게 그 변수가 변화되는지 추적하기 어려워 질 것이다.

 

 

4. My Review

내가 한 과제에서는 local이라는 키워드를 사용한 이유는 해당 로직에서 라운드 승리시 코인의 변화를 준 후에 라운드 종료시 다시 획득 코인의 수를 기본값인 20으로 초기화 해줘야 하기때문에 이것을 dynamic scoping으로 만들어야 했다. 처음에는 같은 이름의 변수가 어떻게 다르게 적용 될 수가 있는 지 이해가 되지 않았지만 과제를 통해 어떻게 활용 할 수 있을지 조금 더 깨닫을 수 있었다.

'Language' 카테고리의 다른 글

[Python] What is static scoping in python?  (2) 2023.02.28
[Python] What is Duck typing?  (1) 2023.02.06
[Python] What is Dynamic typing?  (2) 2023.01.30
[C 언어] How to read file in C  (2) 2023.01.18
[COBOL] What is COBOL ?  (0) 2023.01.10

+ Recent posts