2013-07-17 2 views
2

경고 다루는 것은 내가이 나에게 무서운 경고를 제공펄 : <p>문자열을 사용할 수 없습니다</p> : 엄격한 심판 "은"

my $test_case_list = [ 
    +{  
     label => &config->current->{'DBI'}[0], 
     expected => 'dbi:mysql:dbname=investometrica', 
     },  
     +{  
      label => &config->current->{'maintenance_file_path'}[0], 
      expected => '/var/tmp/', 
     },  
    ];   


    for my $test_case_item (@$test_case_list) { 
    my $label = @{ $test_case_item->{label} }; 
    my $expected = @{ $test_case_item->{expected} }; 
    is ($label, $expected, "Match");                                             
    } 

이 "동안 ARRAY 심판으로 문자열 XX를 사용할 수 없습니다" ("dbi : mysql : dbname = investometrica")를 ARRAY ref로, config.t 행 25에서 "strict refs"를 사용합니다.

내가 뭘 잘못하고 있니?

+3

'$ test_case_item -> {expected}'은 문자열입니다. 왜리스트에 캐스팅합니까? – perreal

+0

오류 메시지를 읽습니다. 문자열을 배열 참조로 사용하려고한다는 것을 알려줍니다. 그만해. –

+0

@perreal : "목록으로 형 변환"은 펄 개념이 아닙니다. – ysth

답변

3

@$test_case_list의 항목은 해시 참조이며 키는 labelexpected입니다. 두 키의 값은 배열 참조가 아닌 스칼라입니다. 따라서 배열 참조로 취급해서는 안됩니다. 그러나 @{ $test_case_item->{label} }과 같이 @{...}을 사용하면이 작업이 수행됩니다. 그들은 이미 원하는 값을 가진 스칼라이기 때문에 대신 $test_case_item->{label}으로 가야합니다.

+0

스칼라는 확실히 배열 참조 일 수 있습니다 ...이 경우 적어도 하나는 문자열입니다. – ysth

+0

@ysth 고마워, 네 말이 맞아. 나는 당신의 의견에 따라 나의 대답을 약간 바꿨다. –

관련 문제