2017-02-17 3 views
0

Perl 서브 루틴에 로컬 변수를 전달하고 수정하려면 어떻게해야합니까? 당신이 직접 그것을 수정하는 경우, 당신은 발신자의 값을 변경할 수 있습니다 있도록 @_Perl 서브 루틴의 변수 수정

use strict; 
use warnings; 

sub modify_a 
{ 
     # ???? 
} 

{ 
     my $a = 5; 
     modify_a($a); 
     print "$a\n"; # want this to print 10 
} 

답변

2

덜 신비한 방법은 참조를 전달하는 것입니다.

use strict; 
use warnings; 

sub modify_a 
{ 
     my ($a_ref) = @_; 
     $$a_ref = 10; 
} 

{ 
     my $a = 5; 
     modify_a(\$a); 
     print "$a\n"; 
} 
+1

'$ a' 또는'$ b'를 변수로 사용하지 못하게하는 것이 좋습니다. 특히'sort' 함수를 위해 예약되어 있습니다. – stevieb

4
sub modify_a { 
    $_[0] *= 2; 
} 

요소는, 전달 된 값으로 별칭이다. 때로는 유용 할 수 있지만 일반적으로 발신자가 놀랍기 때문에 일반적으로 사용하지 않는 것이 좋습니다.

+0

전달되는 변수의 목록이 길고 이름으로 참조하려는 경우 어떻게해야합니까? – jeffythedragonslayer

+0

@jeffythedragonslayer - Data :: Alias ​​모듈을 확인하십시오. 놀람 요인 때문에 참고는 더 낫다, 그러나, IMO. – Tanktalus

+0

방금 ​​참고 문헌으로 알아 냈다고했는데, Data :: Alias도 체크 아웃합니다. – jeffythedragonslayer

관련 문제