2015/06/07(日)[Perl]CPANモ関連のコマンド整理

@INC

・インストール済みモジュールの一覧を出力
$ find `perl -e 'print "@INC"'` -name '*.pm' -print
・特定のモジュールがインストールされているか調べる
$ find `perl -e 'print "@INC"'` -name 'モジュール名.pm' -print
・シェルに登録する場合の例
% vi ~/.zshrc
-------------------------------------
# インストールしたCpanモジュールを出力
alias perl-installed="find `perl -e 'print \"@INC\"'` -name \"*.pm\" -print"
・インストールされているモジュールのバージョンを調べる
# .bashrc, .zshrcなどに以下の関数を追加する。
function cpanv () {
   perl -M$1 -le "print \$$1::VERSION"
}
$ cpanv $module
perllocalを利用するコマンド例
$ cat `perldoc -l perllocal` | perl -nle '/C<Module> L<([^\|]*?)\|.*?>/ and print "$1"' | sort -u
・更新可能モジュール表示
cpan> r # 一覧
cpan> r module # 特定モジュール
・更新
cpan> upgrade # すべて
cpan> upgrade $module # 特定モジュール
・アンインストール
ローカルの場合
cpanm -L local -U <module name>
エラー文例

perllocalを利用するコマンド例のエラー
No documentation found for "perllocal".
関連リンク

http://www.multiburst.net/project-multiburst/archives/2006/01/06/2348.php
http://d.hatena.ne.jp/littlebuddha/20080613/1213324892


2014/12/13(土)[Perl]XML::FeedPPで任意の要素の取得方法

XML:FeedPPでAPIが用意されていない要素の情報を取得する場合は以下のように行う。
$data = $feed->get('media:group/media:thumbnail@url');
getで取得できない要素がある場合は以下のように行う。
$thumbnail = $feed->{'media:group'}->{'media:thumbnail'};
$url = $thumbnail->[0]->{'-url'};
XML:FeedPPで取得できるオブジェクトは、通常のハッシュと同じように操作ができるようです。
Data::Dumperなどを使用して取得したい情報の位置が分かれば上記のようにして取得が可能です。

2014/11/22(土)[Perl][Ubuntu]SpeedyCGIのインストール

UbuntuをVer.14に更新した後に,SpeedyCGIをapt-get経由でインストールしたがパッケージが見つからない。
しかたないのでCPANからインストールしようとしたが、コンパイル時にエラーが発生しインストールすることができなかった。
ネット上で調べるとapache2.2以降でヘッダファイルの定義が変更されてコンパイルできないらしい。
幸いなことにネット上に修正パッチが掲載されていたので動作させることができた。
以下がその手順です。

1.)パッケージのダウンロード
 CPANからSpeedyCGIのパッケージをダウンロードします。
 
 http://search.cpan.org/CPAN/authors/id/H/HO/HORROCKS/CGI-SpeedyCGI-2.22.tar.gz
 
 パッチを以下のサイトからダウンロードします。
 
 perl-CGI-SpeedyCGI のパッチ
 https://github.com/pld-linux/perl-CGI-SpeedyCGI
 
 Web画面の右横のDownload ZIPから入手するとパッケージが落とせます。

git_dl.jpg


2.)パッチの適用
 任意のフォルダにSpeedyCGIのパッケージを解凍します。
 
# tmpディレクトリにコピーする
cp CGI-SpeedyCGI-2.22.tar.gz /tmp/
cp perl-CGI-SpeedyCGI-master.zip /tmp/

#アーカイブを展開する
tar xvzf CGI-SpeedyCGI-2.22.tar.gz
unzip perl-CGI-SpeedyCGI-master.zip

#パッチをSpeedyCGIのソースディレクトリに移動する
mv ./perl-CGI-SpeedyCGI-master/*.patch ../CGI-SpeedyCGI-2.22

#パッチを適用する
cd CGI-SpeedyCGI-2.22
patch -p1 < perl-CGI-SpeedyCGI-debian.patch
patch -p1 < perl-CGI-SpeedyCGI-APXS.patch
patch -p1 < perl-CGI-SpeedyCGI-DESTDIR.patch
3.)コンパイルする
以下の手順でコンパイルします
#Makefileを作成する
perl Makefile.PL

#makeする
make
4.)インストールする
以下の手順でインストールします
make install
以上で、/usr/local/bin にインストールされます。


2013/11/30(土)RSSのURLを取得する

RSSのURLを直接入力するのは手間なのでHTMLからRSSのURLを探査してみました。

以下のライブラリを使えばHTMLの取得とRSSの探査を同時に行ってくれます。
Feed::Find
ではインストールから順番に行ってみましょう。

1.)cpanmでFeed::Findをインストールする
コマンドプロンプトで以下を実行しインストールします。
cpanm Feed::Find
2.)サンプルコードを書いて実行してみる
Feed::Findを使ったサンプルコードは以下となります。
use Feed::Find;

#指定したホームページのフィードを取得する
my @list = Feed::Find->find("http://gigazine.net/");

#フィードのリストを表示する
foreach my $tmp (@list) {
  print $tmp."\n";
}
3.)実行結果
http://gigazine.net/news/rss_2.0/

2011/07/13(水)暇なのでimagemagickで遊んでみた

以下のサイトで高速に使えると書かれていたので試してみました。

本当は速いImageMagick: サムネイル画像生成を10倍速くする方法
;#
;#指定サイズ以下にする(縦横比を考慮)
;#

use Image::Magick;
use Time::HiRes qw(gettimeofday);

#現在の時間を得る
my($sec,$microsec)=gettimeofday();

#-- 最終的な縦横サイズ --#
my $max_width  = 320;
my $max_height = 250;


#コマンドライン経由で処理を行う
my $format = `identify test.jpg`;
my ( $name, $format, $pix_size ) = (split(/ /, $format))[0,1,2];
my ( $now_width, $now_height) = split(/x/, $pix_size);

#-- 現在のサイズから縮小サイズを求める --#
my ($width, $height) 
                    = miniMize(
                          $now_width     #現在の横幅
                        , $now_height    #現在の高さ
                        , $max_width     #最大の横幅
                        , $max_height ); #最大の高さ

#-- オブジェクト作成 --#
my $size = "$widthx$height";

#newするときにサイズを与える(高速化)
my $image = Image::Magick->new(size => $size);

#-- 画像を読込む --#
$image->Read('./test.jpg');


#-- 縮小/拡大 --#
$image->Resize(
          width  => $width
        , height => $height
        , blur   => 0.8
);

#-- 画像を保存する(JPEG) --#
$image->Write('./test_s.jpg');

undef $image;

#現在の時間を得る
my($sec2,$microsec2)=gettimeofday();
my $proctime = $sec2 - $sec;
print "time = ".$proctime."\n";

#------------------------------------------------
#はみ出し調整
#------------------------------------------------
sub miniMize{
    my $x     = shift;
    my $y     = shift;
    my $max_x = shift;
    my $max_y = shift;


    #-- 比率を計算 --#
    my $x_hi  = _min($x, $max_x) / _max($x, $max_x);
    my $y_hi  = _min($y, $max_y) / _max($y, $max_y);

    #-- 比率の小さな方で計算して返す --#
    if( $x_hi > $y_hi ){
        return( (($x * $y_hi), ($y * $y_hi)) );
    }
    else{
        return( (($x * $x_hi), ($y * $x_hi)) );
    }

}

#------------------------------------------------
#大きな値を返す
#------------------------------------------------
sub _max{
    my $a = shift;
    my $b = shift;

    return(
        ($a > $b)?  $a:$b
    );
}


#------------------------------------------------
#小さな値を返す
#------------------------------------------------
sub _min{
    my $a = shift;
    my $b = shift;

    return(
        ($a < $b)?  $a:$b
    );
}
|<<

結果、4秒かかっていた処理が2秒になりました!!
OK キャンセル 確認 その他