2013-07-07 45 views
1
my $var_cot_descn="Veteran's Affairs"; 
my %cot_descn= ("Correctional","Veteran's Affairs","State Pharmacy Assistance Program","VA Medical Center","VA Mail Order Pharmacy","PHS 340B Entity"); 

if (exists $cot_descn{$var_cot_descn}){ 
    print "CustomerDomain=\"GOV\" 
     /> 
     </Org> 
     \n"; 
} 
else{ 
    print "CustomerDomain=\"COM\" 
     /> 
     </Org> 
     \n"; 
} 

所有工作正常,除非我比較「退伍軍人事務」導致if條件失敗。簡單的Perl字符串匹配一個特殊的字符,即'

我該如何解決這個問題?

回答

5

你的哈希沒有"Veteran's Affairs"密鑰,它有一個"Veteran's Affairs"。如果你以更常見的方式定義你的哈希:

my %cot_descn = (
    "Correctional" => "Veteran's Affairs", 
    "State Pharmacy Assistance Program" => "VA Medical Center", 
    "VA Mail Order Pharmacy" => "PHS 340B Entity" 
); 

那麼結構會更清晰。由於沒有"Veteran's Affairs"關鍵,當然這個測試會送你到else分支:

if (exists $cot_descn{$var_cot_descn}) 

$var_cot_descn"Veteran's Affairs"

也許你有你的%cot_descn倒退的第一個鍵/值。

0

不要你的意思是:

#!/usr/bin/env perl 

use strict; 
use warnings; 

# -------------------------------------- 
use Data::Dumper; 

# Make Data::Dumper pretty 
$Data::Dumper::Sortkeys = 1; 
$Data::Dumper::Indent = 1; 

# Set maximum depth for Data::Dumper, zero means unlimited 
local $Data::Dumper::Maxdepth = 0; 

# -------------------------------------- 

my @cot_descn = (
     "Correctional", 
     "Veteran's Affairs", 
     "State Pharmacy Assistance Program", 
     "VA Medical Center", 
     "VA Mail Order Pharmacy", 
     "PHS 340B Entity", 
    ); 
my %cot_descn = map { $_ => 1 } @cot_descn; 

print Dumper \%cot_descn;