Emacs在
之类的行之后会混淆语法fileparse($file, qr"\.[^.]+$");
并认为文件的其余部分是一个字符串。我该如何解决这个问题?
答案 0 :(得分:3)
Emacs对qr
表达式中的引号感到困惑。标准正则表达式分隔符(/)有效:
fileparse($file, qr/\.[^.]+$/);
事实上,几乎所有其他事情似乎都有效。
fileparse($file, qr{(\.[^.]+$/});
fileparse($file, qr*\.[^.]+$*);
fileparse($file, qr#\.[^.]+$#);
我的VIM版本不会被引号混淆,但我知道VIM的旧版本确实如此。引用引号确实令人困惑,因为它使qr
表达式看起来像一个字符串(它不是)。在正则表达式中使用引号作为分隔符通常是不好的策略,即使它在技术上是合法的。
然而,真正重要的问题是什么是fileparse
?这不是标准的Perl功能。我假设这是从File::Basename
导入的?这是对的吗?
根据我的文档,fileparse
中的第二个参数假设是一个数组而不是引用的正则表达式。
答案 1 :(得分:3)
"
作为分隔符,但有时您需要使用'
作为分隔符来防止插值,因此在这种情况下,这可能对某些人有用。
所以,如果由于某种原因你真的想要引用分隔符(或者为了防止使用'
进行插值),你总是可以这样做:
fileparse($file, qr"\.[^.]+$"); #"# highlight fix
使用SO表现糟糕的一个例子:
s'hi'by'; #'# highlight fix
注意:第二个#
是在编辑器中触发注释突出显示,以便highlight fix
显示为评论。