File::Whichで複数インストールされてるものをwhichするとき
本編に関係ないけどwhichはインストール済みの全てのpath返すのね。/usr/bin/memcachedと/usr/local/bin/memcachedがインストールされてたためにエラーになってしまいしばらくハマってた
自己レス。
Proc::Guard - サーバープロセスを起動するライブラリ - blog.64p.orgを見て、真似して、実行してみたら上手くいかなくて、
netstatしてみるとmemcachedのデフォルトポートの11211がLISTENしてて「あれれ?」となり、
しばらくハマってしまっていた。
で、memcachedを確認してみたら上記の通り/usr/bin/memcachedと/usr/local/bin/memcachedが存在してて、
$VAR1 = [ '/usr/local/bin/memcached', '/usr/bin/memcached', '-p', 10001 ];
こんな感じでProc::Guardに渡しちゃってたみたい。
File::Whichはscalarで受け取ると初めの一つだけ返すみたいだから、
my $proc = proc_guard(which('memcached'), '-p', $port); # プロセスを起動する
のwhichをscalarにして、
my $proc = proc_guard(scalar which('memcached'), '-p', $port); # プロセスを起動する
に書き換えたら上手くいきました。
こういうサンプルコードのコピペ程度でハマっちゃうからダメなんだろうなぁ。