使用$ var!〜?/获得不同的结果

时间:2010-10-18 01:34:19

标签: perl

我正在解析一个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分支,但是每隔一段时间就通过if分支?

1 个答案:

答案 0 :(得分:4)

  

这与/ pattern / search类似,只是它在调用reset()运算符之间只匹配一次。例如,当您只想查看一组文件的每个文件中第一次出现的内容时,这是一个非常有用的优化。只要 ??当前包的本地模式被重置。

只需使用/\//m!/!或类似的东西。 ??有一些与之相关的通常不好主意的魔法。