2014-06-19 3 views
0

다음 코드는 해시를 동적으로 만드는 것입니다. 나는 서브 루틴의 else 부분에 return 문을 제공하지 않는 경우에, 나는 Perl 서브 루틴 - return

$VAR1 = { 
    'fruit' => { 'apple' => 'skin' } }; 

를 얻을 수 있지만, return 문을 주면 내가 원하는 무엇인가하는

$VAR1 = { 
    'fruit' => { 
     'apple' => { 
      'red' => 'skin'} 
     } 
    }; 

를 얻을.
이 차이점은 무엇입니까? 누군가 나를 교육 시키실 수 있습니까? 서브 루틴에서 반환을 지정하지 않는 경우

sub construct_hash{ 
    my ($hash, $value, $head, @tail) = @_; 
    if(@tail){ 
     $hash = { $head => construct_hash(\%{$hash}, $value, shift @tail, @tail)} ; 
    }else{ 
     $hash->{$head} = $value; 
     return $hash; 
    } 
} 
my %h; 
my @keys = qw (fruit apple red); 
my $value = 'skin'; 
print Dumper construct_hash(\%h, $value, shift @keys, @keys); 

답변

1

는 펄 평가 마지막 표현식의 값을 (return 참조) 반환합니다. 이 경우 서브 루틴이 else 분기에 $hash->{$head}을 반환한다는 의미입니다.

+0

VAR1 = { '과일'=> { '사과'=> '피부'}}를 반환합니다. 내가 '반환'진술을하지 않으면 $ 값이 아닙니다. – arshad

+0

'return'이 없다면, 서브 루틴은 마치'return $ value'가있는 것처럼 작동합니다. – choroba

+1

Nit : [기술적으로] (http://www.perlmonks.org/?node_id=790129) 스칼라 할당은 LHS로 평가되므로 '$ value -'가 아닌'$ hash -> {$ head} '가 반환됩니다. . – ikegami