perl
  • string
  • flow-control
  • 2010-08-12 8 views 1 likes 
    1

    누구든지이 코드를 잘못 본 것이 있습니까? 우리가 그것을 실행할 때 (Linux에서), 우리는 "Error : Unknown host"블록으로 직행하게된다. Perl elsif evaulated되지 않습니다

    은 코드 아무 문제가 없습니다 버전 5.8.6

    $hostname = "host2"; 
    
    if ($hostname eq "host1") { 
        $dbhost = 'dbi:Oracle:dbhost1'; 
    } 
    elsif ($hostname eq "host2") { 
        $dbhost = 'dbi:Oracle:dbhost2'; 
    } 
    elsif ($hostname eq "host3" || $hostname eq "host4") { 
        $dbhost = 'dbi:Oracle:dbhost3'; 
    } 
    else { 
        print "ERROR: UNKNOWN HOST\n"; 
        die "Can't connect"; 
    } 
    
    +0

    은 나에게 잘 보이고 5.8.9에서 정상적으로 작동합니다. perl의 어떤 버전을 사용하고 있습니까? – Doon

    +0

    "x86_64-linux-gnu-thread-multi 용으로 만들어진 perl, v5.10.1 (*)"(Ubuntu 10.04.1 LTS)에서 작동합니다. 정확한 호스트, 펄 버전은 무엇입니까? 완전한 코드입니까? –

    +2

    '$ hostname'이 프로덕션 코드에 정의되어 있습니까? 당신은'use warnings '으로 달리고 있는가? 엄격한 사용; –

    답변

    8

    코드에 아무런 문제가 없습니다. 그러나, 조회 테이블을 사용하여 간단하게 (그리고 더 유연) 다음과 같습니다

    my $driver = 'dbi:Oracle:'; 
    my %dbihosts = (
        host1 => 'dbhost1', 
        host2 => 'dbhost2', 
        host3 => 'dbhost3', 
        host4 => 'dbhost3', 
    ); 
    
    my $hostname = "host2"; 
    
    die "Unknown host '$hostname'" unless exists $dbihosts{ $hostname }; 
    
    my $dbhost = $dbihosts{ $hostname }; 
    print "$hostname -> $dbhost\n"; 
    
    $dbh->connect("$driver$dbhost", ...); 
    

    PS : 당신이 chomp $hostname 잊지나요?

    +0

    Arggh .... 실종 된 chomp가 정말로 문제였습니다. 그러나 디버거에서 평가되는 다른 elsif 절을 표시하지 않는 이유는 무엇입니까? 그냥 다른 사람에게 똑바로 건너 뜁니다. – wadesworld

    1

    입니다. 그것은 나를 위해 예상대로 실행됩니다.

    +1

    나는 그것이 $ hostname이 정말로 'host2'라고 생각할 때 그것을 검증 할 것이다. – edebill

    관련 문제