人生ずっと勉強。
ITを軸としたT型人間になりたい人のブログ。
07 | 2017/08 | 09
S M T W T F S
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【 perl 】Text::MeCabのインストールがうまくいかない
mecab をインストール後、CPANモジュールの Text::MeCab を
cpan -i Text::MeCab

でインストールしようとしたら、
Failed to load or import from ExtUtils::ParseXS (version 2.21).
Please check that ExtUtils::ParseXS is installed correctly and that the newest version will be
found in your @INC path: "report_error_count" is not exported by the ExtUtils::ParseXS module

というエラーが出た。
@INC を見てもちゃんとパス通ってるし、@INC の中でカレントディレクトリは最後だったし、
ParseXS.pm を確認するとバージョンは 3.04 だし、@EXPORT_OK に report_error_count もある。

なんぞこれと思って、Text::MeCab に同梱されてる ExtUtils::ParseXS を確認してみると
バージョンが 2.21 で、@EXPORT_OK に report_error_count もなかった。
やはりなぜかこっちが使われてるっぽい。

@INCにパスが通ってる方を使わせる方法がよくわかんなかったので、
CPAN の Text::MeCab のページから
tarボールを持ってきて展開後、展開されたディレクトリ内にある
inc/ExtUtils
以下をすべて削除して、
perl Makefile.PL
make
make install

してとりあえずインストール完了。

なんかもっとまともな対象方法がある気がするけど一応メモ。
スポンサーサイト
【 perl 】 cpanm で CPANモジュールを対話的にインストール
cpanm で CPANモジュールをインストールしてると、
どうもデフォルトでは、オプションをすべてデフォルトでインストールしちゃうっぽい。
それが原因でエラーになり、モジュールがインストールされないことがあったので、
どうやったら対話モードになるのかなーと思って cpanm のソースを見たらこんなオプション発見。
'v|verbose' => sub { $self->{verbose} = $self->{interactive} = 1 },

このオプションを指定してやって無事対話的にインストールできました。
% cpanm --verbose Hoge::Hugaga


【perl】 よく使う正規表現はCPANモジュールの Regexp::Common を使って実現しましょう
perlベストプラクティスより。
Regexp::Common を使えば、よく使うような正規表現を再発明しなくてよくなる。

たとえばHTTPのURIとマッチする正規表現は
 use Regexp::Common;
print $uri if $uri =~ m/ $RE{URI}{HTTP} /xms;

こんな感じ。

こんな便利なのあったのねー。知らなかった。
【perl】 正規表現のパターンマッチをリストコンテキストで実行すると捕捉変数いらん
perlベストプラクティスより。
正規表現で捕捉したパターンを保持する捕捉変数の$1とか$2とか。
数字のままだとイミフなのでちゃんとした名前をつけた変数に即代入するほうが
あとからコードを見返したり保守するときにいいんだけど、
 my ($opt_name, $opt_val, $comment) = ($1, $2, $3);
正規表現のパターンマッチがリストコンテキストで実行されたら、
パターンマッチから返されるリストは、捕捉されたもののリストになるから、
捕捉変数をまったく使わなくてよくなる。
 my ($opt_name, $operator, $opt_val, $comment)
= $config =~ m/ \A (\S+) \s* (=|[+]=) \s* ([^;]+) ; \s* \# (.*)/xms;

これ便利ー。

ただ、リストコンテキストでの捕捉は、/gc 修飾子を使用する正規表現には適してない。
リストコンテキストでの捕捉だと、フラグの /g 要素が次のパターンではなく
すべてのパターンとマッチすると誤って解釈されるかららしい。

【perl】 「return;」と「return undef;」の違い
明示的な return undef を使用することの問題点: 実はundef が false であるとは限らないこと。

return undef;
としたサブルーチンがリストコンテキストで呼ばれると、それは false とはならない。

要素として「undef」というスカラー値が1つだけ入ったリスト「(undef)」を返すことになるから。
このリストがスカラーコンテキストで評価されると、「true」になる。

一方、引数なし return は、どのコンテキストで呼び出されても false になる値を返してくれる。
つまり以下と同じことをしてくれる。
use Contextual::Return;
(中略)
return (
LIST { () }
SCALAR { undef }
);



わたくし

いろいろリンク

カテゴリ

月別アーカイブ

最新記事

最新コメント

最新トラックバック

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。