【Perl】Crypt::SSLeayをインストールする際に気を付けること
投稿日: / 更新日:
この記事は2年以上前に書かれたものです。情報が古い可能性があります。
今回はちょっと趣向を変えて、Hinemos以外の技術的なトピックに触れてしようと思います。最近は、あまりPerlを触っていなかったので、久々にPerlの話題にしてみます。
実は、少し必要があって、先ほどPerlでCrypt::SSLeayをインストールしようとしたのですが、例によってテストで躓いてしまいました。テストのエラー出力を見ると、以下のようになっていました(ちなみに環境はCentOS 6.0、Perl-5.14.2です)。
1 2 3 4 5 |
not ok 1 - Net::SSL->new # Failed test 'Net::SSL->new' # at t/01-connect.t line 28. # Connect failed: connect: 接続を拒否されました; 接続を拒否されました at t/01-connect.t line 11 |
t/01-connect.t
が最初のテストに失敗したようです。テストコードの該当箇所を見てみると、以下のようになっていました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
my $test_name = 'Net::SSL->new'; if ($@) { my $fail = $@; if ($fail =~ /\AConnect failed: connect: \b/i) { pass( "$test_name - expected failure" ); } elsif ($fail =~ /\ASSL negotiation failed:/i) { pass( "$test_name - expected failure (443 in use)" ); } else { fail( "$test_name" ); ★ここを通っている diag( $fail ); } } else { ok( defined $sock, $test_name ); } |
コードを見る限り、接続に失敗する分岐が期待されています。そして、実際に接続に失敗していて、エラーメッセージ(“$@”)も期待されたものが出力されているにも係らず、なぜか★の分岐を通っているようです。
再度、エラーメッセージ(“$@”)に着目してみました。”Connect failed: connect: 接続を拒否されました~”となっており、”connect: “の後がマルチバイト文字(“接”)になっています。一方、正規表現の方は、パターンの最後に単語境界(“\b”)を期待しています。どうやら、”接”の直前が単語境界になっていないのが原因のようです。
対処法としては、日本語で出力されているエラーメッセージを(もともとの想定どおり)英語になるようにすれば良さそうです。以下のコマンドで再度インストールしてみました。
1 2 |
$ LANG=C cpanm Crypt::SSLeay |
今度は、想定どおりテストにパスし、モジュールを無事インストールすることができました。
1 2 3 4 5 6 7 |
--> Working on Crypt::SSLeay Fetching http://search.cpan.org/CPAN/authors/id/N/NA/NANIS/Crypt-SSLeay-0.58.tar.gz ... OK Configuring Crypt-SSLeay-0.58 ... OK Building and testing Crypt-SSLeay-0.58 ... OK Successfully installed Crypt-SSLeay-0.58 1 distribution installed |
#ちなみにCentOSの場合、上記以外にも、事前にopenssl-devel
をインストールしておく必要があります。
以上、簡単ですが、PerlでCrypt::SSLeayモジュールをインストールする際の注意点をご紹介しました。