2010-10-18 98 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

相关问题