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); # プロセスを起動する

に書き換えたら上手くいきました。



こういうサンプルコードのコピペ程度でハマっちゃうからダメなんだろうなぁ。