2010-10-18 99 views
1

我正在解析一個XML文件,並且在提取一些信息後,我想查看某個特定字段中是否有'/'(斜槓)。所以,我做了下面的代碼:

if (defined($orgUIDLookup{$orgUidMid})) 
    { 
    my $country = $orgUIDLookup{$orgUidMid}; 
    print "country = $country "; 
    if ($country !~ ?/?) 
    { 
     print "OK\n"; 
     $airportRef{country} = $country; 
    } 
    else 
    { 
     print "no good\n"; 
     $needHelp = 1; 
    } 
    } 

但我似乎在他們越來越爲節點不一致的結果,以斜線:

grep '^country = .*/' foo 
country = CN/MA/RE no good 
country = CN/MA/RE OK 
country = CN/MA/RE OK 
country = CN/MA/RE OK 
country = RB/MJ OK 
country = RB/MJ OK 
country = RB/MJ OK 
country = CN/MA/RE OK 
country = CN/MA/RE OK 
country = RB/MJ OK 
country = RB/MJ OK 
country = CN/MA/RE OK 
country = CN/MA/RE OK 
country = RB/MJ OK 
country = RB/MJ OK 
country = KR/TV OK 
country = KR/TV OK 
country = KR/TV OK 
country = WS/AQ OK 
country = AA/NT OK 
country = AA/NT OK 
country = AA/NT OK 
country = AA/NT OK 
country = AA/NT OK 
country = AA/NT OK 

爲什麼會發生這種測試將經過else分支ok了第一次,但每隔一次通過if分支?

回答

4

這就像/ pattern/search,只是它在調用reset()運算符之間只匹配一次。例如,當您只想查看一組文件中每個文件中第一次出現的內容時,這是一個有用的優化。只要 ??重置當前包的本地模式。

只是使用/\//m!/!或類似的東西。 ??有一些通常與它相關的不良想法。

+2

我從來沒有意識到?是特別的 - 我一直在sed使用它,這意味着我不必逃避斜線。 – 2010-10-18 01:49:53

+0

'm#foo#'真的很不錯,並且視覺上與衆不同,儘管它打破了一些語法突出顯示。 – hobbs 2010-10-18 03:03:53

+0

我曾經使用'm#foo#',直到vim的語法突出顯示使我確信'm {}'和's {} {}'更好。 – Ether 2010-10-18 16:59:38

相關問題