Emacs在像这样的行后是令人困惑的语法
fileparse($file, qr"\.[^.]+$");并认为文件的其余部分是一个字符串。我该如何解决这个问题?
发布于 2011-11-27 08:21:47
Emacs被qr表达式中的引号搞糊涂了。标准正则表达式分隔符(/)起作用:
fileparse($file, qr/\.[^.]+$/);事实上,几乎所有其他的东西似乎都可以工作。
fileparse($file, qr{(\.[^.]+$/});
fileparse($file, qr*\.[^.]+$*);
fileparse($file, qr#\.[^.]+$#);我的VIM版本不会被引号搞糊涂,但我知道旧版本的VIM会弄糊涂。加引号真的很令人困惑,因为它使qr表达式看起来像一个字符串(事实并非如此)。在正则表达式中使用引号作为分隔符通常是不好的策略,即使这在技术上是合法的。
然而,真正重要的问题是什么是fileparse?这不是标准的Perl函数。我假设这是从File::Basename导入的?这是正确的吗?
根据我的文档,fileparse中的第二个参数应该是一个数组,而不是一个带引号的正则表达式。
发布于 2011-11-27 12:23:53
大卫·W可能有正确的答案。同样,最好避免使用"作为分隔符,但有时需要使用'作为分隔符,以防止内插,因此这可能对这种情况下的某些人很有用。
因此,如果出于某种原因,您确实需要引号分隔符(或者为了防止使用'进行插值),您总是可以这样做:
fileparse($file, qr"\.[^.]+$"); #"# highlight fix一个例子使用了一个这样做很糟糕的例子:
s'hi'by'; #'# highlight fix注意:第二个#用于触发编辑器中的注释突出显示,以便highlight fix显示为注释。
https://stackoverflow.com/questions/8282628
复制相似问题