我仍然使用 Perl,一些新代码,并维护旧代码。我使用 emacs 和 cperl 模式。我喜欢语法着色。
起初(很多年前)我不喜欢 cperl-mode 对数组和哈希的特殊着色,但它已经在我身上成长了。有时我会更喜欢使用散列而不是散列引用,只是为了获得特殊的颜色。这听起来可能不是那么糟糕 - 但如果我承认偶尔使用全局 %hash 或 $hash{key} 而不是对象成员 $hashref->{key},只是为了获得颜色,那么,这很糟糕。即语法着色使我想要遵循不良的编程习惯。
所以,我的问题是:有没有人有 emacs/elisp 配置代码来获取 cperl-mode 或 perl-mode 来为与 $hash{key} 相同或相似的 $hashref->{key} 之类的哈希引用着色?
让我用粗体表示可能被着色的地方:
- cperl-mode 现在可以: $hash {key}
- 我想要什么: $hash-> {key}
我已经在 emacs 中对着色(面)进行了广泛的定制——例如着色以区分 DEBUG 代码和非调试代码、TEST 和非测试等——但我还没有设法在 cperl 模式下获得这种语法着色。(后续:我最终得到了 font-lock-add-keywords 工作,如下面我对自己问题的回答所示。)
在下面的示例中,您可以看到 $hashref->{key} 没有着色,而 $hash{key} 是。
对数组引用类似,也许还有其他引用。
我意识到着色引用仅适用于 $hashref->{key} 之类的 deref,而不适用于 $hashref1 = $hashref2 之类的其他内容。我认为我可以忍受这一点。