Perl の Package 書くときにめちゃめちゃ便利な Vim スクリプト書いた
世の中の Perl の Package の末尾には大体 `1;` って書いてあって、これが何か言うと「このモジュールは真値を返していますよー」という表明で、まああけすけに言うとこれが記述されていなければ、そのモジュールは use とかされた時に不正なモジュールとして扱われてしまい、読み込みが 失敗してしまう訳です。
さっきも言ったように、返す値は真値であれば何でも良いので、`42;` って書いたり `"HELLO";` って書いたりしても別に良い。
で、世の中には `!!1;` っていう面妖な記述をしているモジュールがあって、人が泣いている。
`!!1;` は、1 という真値を ! によって偽値にして、さらにそれを ! する事によって真値にすることによって、真値であることを表明している。
これでも問題なく動くけれど、`!!1;` って初見の人はびっくりしてしまうし、そもそも2回も否定演算しているからパフォーマンスに問題が出てきてしまうかも知れない。
[2013/08/21 22:55 訂正]
パフォーマンスに差が出るという事は無いとのことです。以下をご参照ください。
[perl] !!1 と 1 ではパフォーマンスに差がでるのか - blog.64p.org
[訂正ここまで]
という訳でこのVim スクリプトの出番です。
func! s:RemoveChickChickOne() | |
:%s/!!1;/1;/ge | |
endf | |
au BufWritePre *.pm call s:RemoveChickChickOne() |
これを.vimrc とかに書いておくと、pm ファイル (Perl のモジュールを表現するファイル) を編集している最中、保存時にフックして自動的に `!!1;` という記述を `1;` に置き換えてくれる。
これは便利。皆さん使って下さい。