Macでperlbrewが正常に利用できない件を調査

2017/01/25のMac(OS X 10.12.2)のiTunesのアップデートを適用したあたりからローカル環境での不具合に遭遇。
なんらかの理由で設定が変わった可能性も無きにしもあらずだが、iTunesを怪しんでる。
perl 関連のアップデートはしばらくしていない。

## 状況
`cpan`も `cpanm`もエラー、`sudo cpan`は立ち上がる。
なんだこれ？ ~~`perl -v`すら通らない~~さすがに勘違いっぽい

```
dyld: lazy symbol binding failed: Symbol not found: _Perl_xs_version_bootcheck
  Referenced from: /Users/*/local/lib/perl5/lib/perl5/darwin-2level/auto/Cwd/Cwd.bundle
  Expected in: dynamic lookup

dyld: Symbol not found: _Perl_xs_version_bootcheck
  Referenced from: /Users/*/local/lib/perl5/lib/perl5/darwin-2level/auto/Cwd/Cwd.bundle
  Expected in: dynamic lookup
```
※`*`はユーザー名を置換しました

## 試したこと
- `perlbrew switch 5.18.4` →解決。でも5.10.1を使いたいんだよう…
- `perlbrew uninstall 5.10.1` できる
- `perlbrew install 5.10.1` 失敗する
- `perlbrew self-upgrade` できる
- `perlbrew patch-perl` できる
- `sudo perlbrew install 5.10.1` 失敗する
- `perlbrew —-notest install 5.10.1` 失敗する
- 再起動
- 再び`sudo perlbrew install 5.10.1` 失敗する
- `sudo rm -r ~/perl5/perlbrew/dists/perl-5.10.1.tar.bz2` 成功
- `sudo rm -r ~/perl5/perlbrew/build/perl-5.10.1/` 成功
- `perlbrew install 5.10.1`  失敗する
- `perlbrew --notest install 5.10.1` 成功する
- `perlbrew switch 5.10.1` 成功する
- `perl -v` 成功
- `cpan` 再び最初のエラーが出る
- `perlbrew install 5.16.3`  成功する
- `perlbrew install 5.14.4`  失敗する
- `perlbrew --notest install 5.14.4` 成功する
どうやら5.16.3と5.14.4の間に境界があるっぽい。
- `perlbrew switch 5.14.4` 成功する
- `cpanm Jcode` ↓

```
Attempt to reload Scalar/Util.pm aborted.
Compilation failed in require at /Users/*/local/lib/perl5/lib/perl5/File/Temp.pm line 18.
BEGIN failed--compilation aborted at /Users/*/local/lib/perl5/lib/perl5/File/Temp.pm line 18.
Compilation failed in require at /Users/*/perl5/perlbrew/bin/cpanm line 32.
BEGIN failed--compilation aborted at /Users/*/perl5/perlbrew/bin/cpanm line 32.
Compilation failed in require at /Users/*/perl5/perlbrew/bin/cpanm line 499.
BEGIN failed--compilation aborted at /Users/*/perl5/perlbrew/bin/cpanm line 499.
```
壊れてますね。
- `perlbrew switch 5.16.3` 成功する
- `cpanm Jcode` ↑のエラーが出る
- `perlbrew switch 5.18.4` 成功する
- `cpanm Jcode` ↓
`Jcode is up to date. (2.07)`

結論。予めインストールしてあった~~5.18.4未満ではエラーとなる。~~

## 新展開
- `perlbrew install 5.20.3` 成功する
- `perlbrew switch 5.20.3` 成功する
- `cpanm Jcode` 失敗する__←イマココ__

つまり__予めインストールしてあった5.18.4以外ではエラー__となる。

## Mac OS X10.12.3の適用
- 直らんのでdyldなるものの更新を試みる `brew install dyld`↓

```
Error: No available formula with the name "dyld" 
==> Searching for similarly named formulae...
This similarly named formula was found:
dyld-headers
```
これは怪しい！というわけで
- ` brew install dyld-headers`

```
==> Using the sandbox
==> Downloading https://opensource.apple.com/tarballs/dyld/dyld-360.18.tar.gz
######################################################################## 100.0%
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    CPPFLAGS: -I/usr/local/opt/dyld-headers/include

==> Summary
🍺  /usr/local/Cellar/dyld-headers/360.18: 9 files, 112.5K, built in 7 seconds
```
なんか本質を外したっぽい…

- `brew update`
- `brew doctor`
- `brew reinstall libtool --universal && brew unlink libtool && brew link libtool`

# 進展あり(2017/02/16)
この件諦めて5.18.4使ってたんですけど、[全然関係ないところで「お前のlocal::libおかしくね？」と指摘され](https://github.com/tokuhirom/Furl/issues/100#issuecomment-280284823)[^1][local::lib](https://github.com/Perl-Toolchain-Gang/local-lib)の再インストールを試みたところ、エラー。

[^1]: 大御所なのでビビりました


```
t/shell.t .............. 48/168 
#   Failed test 'zsh: deactivate PERL5LIB'
#   at t/shell.t line 192.
#          got: '/Users/*/local/lib/perl5/lib/perl5'
#     expected: '/Users/*/local/lib/perl5/lib/perl5:’
```
んん？シェルの設定なのか？ということで`perlbrew init`からやり直し。

```
perlbrew root (~/perl5/perlbrew) is initialized.

Append the following piece of code to the end of your ~/.zshenv and start a
new shell, perlbrew should be up and fully functional from there:

    source ~/perl5/perlbrew/etc/bashrc

Simply run `perlbrew` for usage details.

Happy brewing!
```
おっしゃる通りに`vi zshenv`で確認

```
export PERL_CPANM_OPT="--local-lib=~/local/lib/perl5"
export PERL5LIB=$HOME/local/lib/perl5/lib/perl5:$PERL5LIB;
```
んん？なんかパスおかしいし`source ~/perl5/perlbrew/etc/bashrc`も挿入されていない。

```
export PERL_CPANM_OPT="--local-lib=~/local/lib/perl5"
export PERL5LIB=$HOME/local/lib/perl5:$PERL5LIB;
source ~/perl5/perlbrew/etc/bashrc
```
編集して[シェルを再起動](http://qiita.com/yusabana/items/c4de582c6f85a42817d8)して`cpanm local::lib`←成功

これだったんだ！と思って`perlbrew install 5.10.1`しかし相変わらず↓

```
../lib/locale.t                                                (Wstat: 0 Tests: 117 Failed: 1)
  Failed test:  99
```

## zshが悪さしてるわけでもなさげ…
- `chsh` でzshからbashに変更。
- `\curl -L https://install.perlbrew.pl | bash`←__成功__（zshだと失敗するので前進）
- `vi .bash_profile `←設定してあった
- `perlbrew install 5.10.1`←変わらず失敗

```
Test Summary Report
-------------------
../ext/POSIX/t/posix.t                                         (Wstat: 0 Tests: 66 Failed: 0)
  TODO passed:   11
../lib/locale.t                                                (Wstat: 0 Tests: 117 Failed: 1)
  Failed test:  99
Files=1712, Tests=227122, 830 wallclock secs (18.10 usr  6.68 sys + 185.57 cusr 30.96 csys = 241.31 CPU)
Result: FAIL
Failed 1/1712 test programs. 1/227122 subtests failed.
make[2]: *** [_test_tty] Error 255
make[1]: *** [_test] Error 2
make: *** [test_harness] Error 2
perl-5.10.1 is successfully installed.
```
`Failed`なのか`successfully installed`なのか?
`perlbrew list`すると入ってないので失敗だね。

- `perlbrew install 5.20.3`←__成功した__

どっかのバージョンから下がインストールできないという不具合なのかな？
再現する人いませんかね？

## TO DO 
- そもそもperlに固有のことなのか調べる(dyldの影響範囲が広そう)
- 様々なバージョンをinstallしてみる
- zshでも試してみる。