【发布时间】:2014-10-27 01:14:00
【问题描述】:
Vi 弄乱了我的 perl 脚本!
虽然代码末尾的 { 与任何右花括号都不匹配,但第 27 行和第 28 行末尾的 {s 与第 30 行的 } 匹配。
这是 Vi 如何处理我的脚本行为的屏幕视频。
(来源:abbasinasab.com)
这也是我的麻烦代码:
#CODE
while ($data =~ m{
^foo_\s+ $X \s* \{
( (?: [^{}]+ | \{(?1)\} )* )
\}
}mgx)
{
my $Y = $1;
next if $Y !~ m{
bar_$Z \s* \{
( (?: [^{}]+ | \{(?1)\} )*? )
\}
}mx;
my $DO = $1;
#CODE
}
我的问题是:
- 在这种情况下,Vi 如何以及为什么不能处理花括号。
- 如何重写我写得丑陋的代码以避免这种对 Vi 的混淆。
【问题讨论】:
-
您可以为
m使用任何分隔符。喜欢:seq 350 | perl -lanE 'say $_ if m 1331',但建议只使用标点符号,例如:/@或成对的()[]<>等。 -
Perl 非常难以解析,尤其是使用
/gmx修饰符(尤其是/x修饰符)。 -
Perl 实际上无法解析。 perlmonks.org/?node_id=663393
-
如果你认为这是 vim-perl 处理这些大括号的一个错误(很可能是),请向 vim-perl 项目提交票证:github.com/vim-perl/vim-perlvim-perl is我们在其中整理了与 Perl 相关的 Vim 文件,这些文件被折叠回 Vim 发行版。你也可以尝试使用 vim-perl 项目中的语法文件,看看最新版本是否比你现在使用的任何版本的 Vim 更健壮。
-
嗯,很抱歉这个离题的问题,但是你用什么来制作这个小截屏视频? :P
标签: regex perl vim vi curly-braces