perlを書く時に使ってるsnippetのはなし

Perl Advent Calnedar 2017の4日目。

普段perlを書く時に使っているsnippetについて書いてみる。

環境

  • Spacemacs v.0.200.10 on Emacs 25.2.1

Spacemacsを入れればすぐに使えるyasnippetにsnippetを追加している。

snippet

最初に書く系

pl/pmファイルを作る時に書くことは決まっている。 設定すればファイルの新規作成と同時に自動で入力しておくこともできるが、 ちょっと煩わしいのでsnippetにしている。


# -*- mode: snippet -*-
# name: default for pl file
# --
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;

$0

pmファイル用のものはファイルパスを元にモジュール名を自動生成するためにelispの力を借りている。

# -*- mode: snippet -*-
# name: default for pm file
# --
package `
(let ((file-path (file-name-sans-extension (buffer-file-name))))
    (if (string-match "lib/" file-path)
        (replace-regexp-in-string "/" "::"
                                  (car (last (split-string file-path "/lib/"))))
      (file-name-nondirectory file-path)))
`;
use strict;
use warnings;
use utf8;

$0

1;

変数をダンプする

perlを書いているときはprintfデバッグをすることが多い。 とりあえず書けば何かしら出してくれるData::Dumperは便利。

# -*- mode: snippet; require-final-newline: nil -*-
# name: dump object with Data::Dumper
# key: dump
# --
use Data::Dumper; warn Dumper $0

Data::Printerがある環境であれば、こちらのほうが出力は見やすい。

# -*- mode: snippet; require-final-newline: nil -*-
# name: dump object with Data::Printer
# key: ddp
# --
use DDP; p $0

stack traceを表示する

こちらも同じくデバッグ用。

# -*- mode: snippet; require-final-newline: nil -*-
# name: cluck
# key: cluck
# --
use Carp; Carp::cluck();

クエリログを表示する

DBIx::QueryLogをピンポイントで使う場合用。 このモジュールはuseするだけで有効になるのだけど、 全てのクエリログがみたいのではない場合に使う。

enableとdisableの間に対象のコードが来るようにする。 リージョンの前後にsnippetを挿入するのもできそうだが、あんまり不便を感じていないので調べていない。

色を付けて見つけやすく、1行にしてテキスト処理しやすくしている。

use DBIx::QueryLog ();
DBIx::QueryLog->color("red");
DBIx::QueryLog->compact(1);
DBIx::QueryLog->enable;
DBIx::QueryLog->disable;

おわり

よく使うものを挙げてみた。 snippet、便利なので有効活用しましょう。

明日の枠はまだ空いてるみたい。