perldoとrubydoによるフィルタリング処理はズルイと思うほど便利。

昨日はpythonを使ったフィルタ処理を紹介したので、
perlrubyを使ったやり方も説明しましょう。

perldoによるフィルタリング

まず、フィルタリングにperlを使用する方法から
perlにはperldoというフィルタリグ用コマンドがあって、このコマンドを使うと楽。

:'<,'>perldo $_ = "test" . $_


pythonだと、↓ここまで書かなきゃできなかった選択範囲テキスト置換が

:'<,'>python current.range[:] = ["test" + i for i in current.range]

なんと、たった↓これだけ。これだけで出来てしまいました。

:'<,'>perldo $_ = "test" . $_

素晴らしい。
perldoの処理で、$_を置き換えると、各行のテキストも置き換わる。
さすがは、短く美しく書けることには定評のあるperl言語です。


こんなに短く処理できると、vimエディタの正規表現による置換処理の代替選択肢にもなりますね。
↓サンプル程度の処理なら、大した差はないですけど、

:'<,'>s/^/test/

CSVの5番目、6番目の間にテキスト追加する、とかやろうとしたら、
vimエディタの正規表現で置き換えるより、perldoの方が楽っぽいでしょう?

rubydoによるフィルタリング

rubyにも、perlのperldoと同じような機能をもつ、rubydoコマンドがあります。

:'<,'>rubydo $_ = "test" + $_

rubyもらくらくフィルタリング処理できますね。

pythondoによるフィルタリング

pythondoなんてコマンドありません。ヒドイです。
なんだかpythonの待遇が悪いです。


おまけに、使う前にはimport文を使用しなさい、という条件があるので、
外部スクリプト無しでフィルタリングするのは、perlrubyに比べて、ちょっと面倒な感じです。

:python import sys
:python from vim import *

(追記、よく考えたら、必要な時だけimportすればいいよね。
後者は大抵必要だけど、前者はいらない時も多いな。)

最後に

やはり、今回も関係ない話で閉じますが、
vimスクリプトの情報を扱っている海外の有力サイト、便利サイトの情報を収集中なので、
どこでもいいから知ってたら教えてください。