使用$ var!〜?/?获得不同的结果
问题描述:
我正在解析一个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
分支?
答
这就像/ pattern/search,只是它在调用reset()运算符之间只匹配一次。例如,当您只想查看一组文件中每个文件中第一次出现的内容时,这是一个有用的优化。只要 ??重置当前包的本地模式。
只是使用/\//
或m!/!
或类似的东西。 ??
有一些通常与它相关的不良想法。
我从来没有意识到?是特别的 - 我一直在sed使用它,这意味着我不必逃避斜线。 – 2010-10-18 01:49:53
'm#foo#'真的很不错,并且视觉上与众不同,尽管它打破了一些语法突出显示。 – hobbs 2010-10-18 03:03:53
我曾经使用'm#foo#',直到vim的语法突出显示使我确信'm {}'和's {} {}'更好。 – Ether 2010-10-18 16:59:38