メインブログに書くまでもない自分用メモを垂れ流す。日々是勉強也。
システム起動時には、svscan によって起動された supervise はデフォルトでデーモンを up してしまう。 これを防ぐためには、ディレクトリ /service/サービス名 に down という ファイルをつくっておく。
$ touch /service/サービス名/down
とすればよい。中身はなくてもファイルの存在だけがスイッチになる。 supervise はその起動時にこのファイルを発見すると、 デフォルトでサービスを down のままにしておく。 supervise が down ファイルの有無を 検査するのは、supervise の起動時だけなので注意すること。 いったん supervise が起動してしまったら、デーモンの 停止・再開には svc を使おう。
私家版 daemontools FAQ (2/3)
いつも忘れる。
$` | マッチした文字列に先行する部分 |
---|---|
$& | マッチした文字列全体 |
$' | マッチした文字列に後続する部分 |
Perl 5.10 から、等価な変数である ${^PREMATCH}, ${^MATCH}, ${^POSTMATCH} も使えますが、これらが定義されるには、正規表現に /p (保存(preserve)) 修飾子をつける必要があります。
perlreref - Perl の正規表現のリファレンス - perldoc.jp
いわゆるクリスマスオプション。頻出だけどすぐ忘れる。。。
x | PATTERN 内のスペースを無視して、コメントを使えるようにする |
---|---|
m | ^ と $ が行の先頭と末尾にマッチする(複数行のテキストにマッチさせるときに指定する) |
s | ワイルドカードのドット( . )が改行にもマッチするようにする |
[alias] # 最近使った順にソートされた git branch recent-branchs = for-each-ref --format='%(refname:short)' --sort=-committerdate refs/heads # master にマージ済みのブランチを消す delete-merged-branches = !git branch --merged | grep -v \\* | xargs -I % git branch -d %
use Test::Base; my $blocks1 = Test::Base->new; my $blocks2 = Test::Base->new; $blocks1->delimiters(qw(!!! @@@))->spec_file('test1.txt'); $blocks2->delimiters(qw(### $$$))->spec_string($test_data); plan tests => $blocks1->blocks + $blocks2->blocks; # ... etc
http://search.cpan.org/~ingy/Test-Base-0.60/lib/Test/Base.pm
結論:なんか Getopt::Compact::WithCmd でいいやと思った。
__END__
use constants した定数は実体は関数だから変数展開とかできなくてだるいので、変数としてExportしたい。
package Foo; use common::sense; use Exporter qw(import); our @EXPORT_OK = qw($Bar); our $Bar = 'constant variable'; 1;
use Foo qw($Bar); warn $Bar; #=> 'constant variable'
なぜか $Bar はクラス変数にしないと動かない。
Reply is awesome! - tokuhirom's blog
~/.replyrc に以下の一行を書き足すと、
[LoadClass]
ロードしてないモジュールでもよしなに自動ロードしてくれる。
(下はLWP::UserAgentをuseせずにやってる。Can't locateエラーにならない)
Reply、Carp::REPLより軽いし、入りやすいし、コードも読みやすいしで好きだ。
あと不満なのはpackage名の補完がきかないことくらいなので、誰かやってください。(投げ)
まずprove実行時にTest::Flattenをuseするようにするように、
.proverc
--exec "perl -Ilib -It/lib -MTest::Flatten"
すると、SUBTEST_FILTERという環境変数でフィルタ出来るようになる
SUBTEST_FILTER=foo prove -lvc t/
これで /foo/ にマッチするsubtestだけ実行される。
https://metacpan.org/module/XAICRON/Test-Flatten-0.09/lib/Test/Flatten.pm#SUBTEST_FILTER
perlで改行など特殊文字が含まれるものをDumpする時は - $shibayu36->blog;
Useqq オプション便利すね。
よく使う。出力結果をコンパクトにしてくれる。
use Data::Dumper; my $data = { foo => 1, bar => [1, 2] }; warn Dumper $data; # $VAR1 = { # 'bar' => [ # 1, # 2 # ], # 'foo' => 1 # }; local $Data::Dumper::Indent = 1; # インデントの深さレベル local $Data::Dumper::Terse = 1; # "$VAR1 = " 消す warn Dumper $data; # { # 'bar' => [ # 1, # 2 # ], # 'foo' => 1 # }
ちなみにオプションは、localを使って設定しとくとスコープ限定できて良い。
自分は、Vimのスニペットに
use Data::Dumper; local $Data::Dumper::Indent = 1; local $Data::Dumper::Terse = 1; warn Dumper
を d とかで呼び出せるように登録してる。
サブルーチンをDumpできる。ただし実体とまったく同じものではない。
use Data::Dumper; use Path::Class qw(file); warn Dumper \&file; # $VAR1 = sub { "DUMMY" }; local $Data::Dumper::Deparse = 1; warn Dumper \&file; # $VAR1 = sub { # package Path::Class; # use strict 'refs'; # 'Path::Class::File'->new(@_); # };
Data::Dump::Streamer 使っても同じ事ができる。
こっからは Data::Dumper からは脱線した余談。
デフォルトだとインデントが豪快な Data::Dumper に対して、Data::Dump は出力が最初からコンパクト。
my $data = { foo => 1, bar => [1, 2] }; use Data::Dump qw(dump); warn dump $data; # { bar => [1, 2], foo => 1 } use Data::Dumper; warn Dumper $data; # $VAR1 = { # 'bar' => [ # 1, # 2 # ], # 'foo' => 1 # };
コンパクトなほうが好きな人はこれ使えばいいと思う。
僕はオブジェクトのdump結果が Data::Dumper よりも見難く感じるから使ってない。
Data::Dumper::Names というのがある
use Data::Dumper::Names; my $foo; my @bar = qw/this that/; warn Dumper($foo, \@bar); # $foo = undef; # @bar = ( # 'this', # 'that' # );
Data::Printer というのがある