CPANの更新で問いただされるapxsのパス
which apxsでも見つからなくて、
find / -name apxsを叩くとかなり時間がかかって
/user/sbin/apxs
と表示された
「cpan」タグアーカイブ
CentOS5.5でyum一括アップデートしたらPerlがCompress::Zlibでコケるようになった
昨日、yum一括更新を行ったのですが、その後でどうもクローラが正常に機能しなくなりました。
ログを見てみると、Compress::Zlibで以下のようなエラーを吐いていることを確認。(コピペでなくて入力なのでタイポあるかも)
dualvar is only available with the XS version of Scalar::Util at /usr/perl5/lib/site_perl/5.8.8/Compress/Zlib.pm line 9
つまりはScalar::Utilのせいで動かないらしいです。
そこでCPANからScalar::UtilをiinstallしようとしてもNOT OKになってしまうので、とりあえず
force install Scalar::Utilde
でしのぐことに。
おそるおそるクローラを起動するとエラーを吐かずに正常に機能するようになりました。
でめたしでめたし。
PerlのNet::Twitterモジュールがインストールできない
Perlでtwitterに何かをやらかすにはNet::Twitterというモジュールを利用するといいようです。
早速Net::Twitterを入れてみることにしました。
ちなみに、WindowsVistaはActivePerl 5.8.8です。
ppmでは用意されていないので、CPANからインストールします。
しかし、実際に実行してみると、いろいろ足らないからインストールしますよといわれて、言うとおりにインストールしたのですが、あちこちでNOT OKとなってしまいます。
C:\Users\admin>cpan install Net::Twitter CPAN: Storable loaded ok Going to read C:\Perl\cpan\Metadata Database was generated on Thu, 22 Apr 2010 21:26:57 GMT install is up to date. Running install for module Net::Twitter Running make for M/MM/MMIMS/Net-Twitter-3.12000.tar.gz CPAN: Digest::MD5 loaded ok CPAN: Compress::Zlib loaded ok Checksum for C:\Perl\cpan\sources\authors\id\M\MM\MMIMS\Net-Twitter-3.12000.tar.gz ok Scanning cache C:\Perl/cpan/build for sizes Deleting from cache: C:\Perl\cpan\build\ExtUtils-MakeMaker-6.56 (17.6>10.0 MB) Can't remove directory C:\Perl\cpan\build\ExtUtils-MakeMaker-6.56/t/Big-Dummy (Permission denied) at C:/Perl/lib/CPAN.pm line 9 6 Can't remove directory C:\Perl\cpan\build\ExtUtils-MakeMaker-6.56/t (Directory not empty) at C:/Perl/lib/CPAN.pm line 966 Can't remove directory C:\Perl\cpan\build\ExtUtils-MakeMaker-6.56 (Directory not empty) at C:/Perl/lib/CPAN.pm line 966 Deleting from cache: C:\Perl\cpan\build\Net-Twitter-3.12000 (17.6>10.0 MB) Deleting from cache: C:\Perl\cpan\build\Sub-Name-0.04 (17.0>10.0 MB) Deleting from cache: C:\Perl\cpan\build\Sub-Identify-0.04 (16.9>10.0 MB) Deleting from cache: C:\Perl\cpan\build\Variable-Magic-0.41 (16.7>10.0 MB) Deleting from cache: C:\Perl\cpan\build\B-Hooks-EndOfScope-0.08 (16.5>10.0 MB) Deleting from cache: C:\Perl\cpan\build\namespace-clean-0.14 (16.4>10.0 MB) Deleting from cache: C:\Perl\cpan\build\Scalar-List-Utils-1.23 (16.3>10.0 MB) Deleting from cache: C:\Perl\cpan\build\Devel-GlobalDestruction-0.02 (16.2>10.0 MB) Deleting from cache: C:\Perl\cpan\build\Class-MOP-1.00 (16.0>10.0 MB) Deleting from cache: C:\Perl\cpan\build\Moose-1.01 (15.0>10.0 MB) Deleting from cache: C:\Perl\cpan\build\Data-Visitor-0.27 (12.5>10.0 MB) Deleting from cache: C:\Perl\cpan\build\DateTime-0.55 (12.4>10.0 MB) Deleting from cache: C:\Perl\cpan\build\DateTime-Format-Strptime-1.2000 (11.6>10.0 MB) Deleting from cache: C:\Perl\cpan\build\MooseX-MultiInitArg-0.01 (11.4>10.0 MB) Deleting from cache: C:\Perl\cpan\build\namespace-autoclean-0.09 (11.4>10.0 MB) Deleting from cache: C:\Perl\cpan\build\Digest-SHA1-2.12 (11.3>10.0 MB) Deleting from cache: C:\Perl\cpan\build\Encode-2.39 (11.2>10.0 MB) CPAN: Archive::Tar loaded ok Net-Twitter-3.12000/ Net-Twitter-3.12000/lib/ Net-Twitter-3.12000/lib/Net/ Net-Twitter-3.12000/lib/Net/Identica.pm Net-Twitter-3.12000/lib/Net/Twitter.pm Net-Twitter-3.12000/lib/Net/Twitter/ Net-Twitter-3.12000/lib/Net/Twitter/Role/ Net-Twitter-3.12000/lib/Net/Twitter/Role/WrapError.pm Net-Twitter-3.12000/lib/Net/Twitter/Role/Legacy.pm Net-Twitter-3.12000/lib/Net/Twitter/Role/API/ Net-Twitter-3.12000/lib/Net/Twitter/Role/API/Search.pm Net-Twitter-3.12000/lib/Net/Twitter/Role/API/TwitterVision.pm Net-Twitter-3.12000/lib/Net/Twitter/Role/API/REST.pm Net-Twitter-3.12000/lib/Net/Twitter/Role/API/Lists.pm Net-Twitter-3.12000/lib/Net/Twitter/Role/OAuth.pm Net-Twitter-3.12000/lib/Net/Twitter/Role/RetryOnError.pm Net-Twitter-3.12000/lib/Net/Twitter/Role/RateLimit.pm Net-Twitter-3.12000/lib/Net/Twitter/Role/SimulateCursors.pm Net-Twitter-3.12000/lib/Net/Twitter/Role/InflateObjects.pm Net-Twitter-3.12000/lib/Net/Twitter/OAuth/ Net-Twitter-3.12000/lib/Net/Twitter/OAuth/XAuthRequest.pm Net-Twitter-3.12000/lib/Net/Twitter/API.pm Net-Twitter-3.12000/lib/Net/Twitter/Search.pm Net-Twitter-3.12000/lib/Net/Twitter/Core.pm Net-Twitter-3.12000/lib/Net/Twitter/OAuth.pm Net-Twitter-3.12000/lib/Net/Twitter/Error.pm Net-Twitter-3.12000/lib/Net/Twitter.pod Net-Twitter-3.12000/Changes Net-Twitter-3.12000/MANIFEST Net-Twitter-3.12000/examples/ Net-Twitter-3.12000/examples/oauth_webapp.pl Net-Twitter-3.12000/examples/oauth_desktop.pl Net-Twitter-3.12000/README Net-Twitter-3.12000/src/ Net-Twitter-3.12000/src/net-twitter-pod.tt2 Net-Twitter-3.12000/src/build.pl Net-Twitter-3.12000/t/ Net-Twitter-3.12000/t/22_twitter_insanity.t Net-Twitter-3.12000/t/20_exceptions.t Net-Twitter-3.12000/t/unicode.t Net-Twitter-3.12000/t/lib/ Net-Twitter-3.12000/t/lib/TestUA.pm Net-Twitter-3.12000/t/13_search.t Net-Twitter-3.12000/t/99-pod_syntax.t Net-Twitter-3.12000/t/02_fails.t Net-Twitter-3.12000/t/51_rate_limit.t Net-Twitter-3.12000/t/40_nt_subclasses.t Net-Twitter-3.12000/t/11_useragent.t Net-Twitter-3.12000/t/50_inflate_objects.t Net-Twitter-3.12000/t/99-pod_coverage.t Net-Twitter-3.12000/t/21_wraperror.t Net-Twitter-3.12000/t/10_net-twitter-regression.t Net-Twitter-3.12000/t/12_identica.t Net-Twitter-3.12000/t/01_basic.t Net-Twitter-3.12000/t/60-api_lists.t Net-Twitter-3.12000/t/retry.t Net-Twitter-3.12000/t/geo.t Net-Twitter-3.12000/t/51_since.t Net-Twitter-3.12000/t/00_load.t Net-Twitter-3.12000/t/14_authenticate.t Net-Twitter-3.12000/t/30_legacy.t Net-Twitter-3.12000/t/20_generated.t Net-Twitter-3.12000/t/15_subclass.t Net-Twitter-3.12000/t/99-pod_spelling.t Net-Twitter-3.12000/t/lookup_users.t Net-Twitter-3.12000/META.yml Net-Twitter-3.12000/Makefile.PL Net-Twitter-3.12000/inc/ Net-Twitter-3.12000/inc/Module/ Net-Twitter-3.12000/inc/Module/Install.pm Net-Twitter-3.12000/inc/Module/Install/ Net-Twitter-3.12000/inc/Module/Install/WriteAll.pm Net-Twitter-3.12000/inc/Module/Install/Fetch.pm Net-Twitter-3.12000/inc/Module/Install/Win32.pm Net-Twitter-3.12000/inc/Module/Install/Include.pm Net-Twitter-3.12000/inc/Module/Install/Repository.pm Net-Twitter-3.12000/inc/Module/Install/AutoInstall.pm Net-Twitter-3.12000/inc/Module/Install/Base.pm Net-Twitter-3.12000/inc/Module/Install/Metadata.pm Net-Twitter-3.12000/inc/Module/Install/Can.pm Net-Twitter-3.12000/inc/Module/Install/Makefile.pm Net-Twitter-3.12000/inc/Module/Install/AutoManifest.pm Net-Twitter-3.12000/inc/Module/AutoInstall.pm CPAN.pm: Going to build M/MM/MMIMS/Net-Twitter-3.12000.tar.gz *** Module::AutoInstall version 1.03 *** Checking for Perl dependencies... [Core Features] - Test::More ...loaded. (0.94 >= 0.88) - Carp ...loaded. (1.04) - Digest::SHA ...loaded. (5.47) - List::Util ...loaded. (1.18) - Net::Netrc ...loaded. (2.12) - Scalar::Util ...loaded. (1.18) - Data::Visitor::Callback ...missing. - DateTime ...missing. (would need 0.51) - DateTime::Format::Strptime ...missing. (would need 1.09) - Encode ...loaded. (2.12) - HTML::Entities ...loaded. (1.35) - HTTP::Request::Common ...loaded. (1.26) - JSON::Any ...loaded. (1.22 >= 1.21) - LWP::UserAgent ...loaded. (2.033 >= 2.032) - Moose ...missing. (would need 0.9) - Moose::Exporter ...missing. - Moose::Role ...missing. - MooseX::MultiInitArg ...missing. - namespace::autoclean ...missing. (would need 0.09) - Net::OAuth ...missing. (would need 0.2) - URI ...loaded. (1.52 >= 1.4) - URI::Escape ...loaded. (3.29) - Try::Tiny ...loaded. (0.04) - JSON ...loaded. (2.17 >= 2.02) ==> Auto-install the 9 mandatory module(s) from CPAN? [y]
とりあえずそのままYを押して足らないものを入れさせてみましたが、ぜんぜんだめでした。
ちなみに、CentOS5のPerl5.8.8でも同じような現象に。CPAN自体をアップデートしてやり直してもだめ。yumから1つ1つ入れてみようと思って、まず
yum install perl-Moose
を終えても、CPANからはまた入れなおそうとしてしまいます。
Mooseという新しい技術を利用するのもいいのですが、入れること自体がハードルが高いとあまり意味がないですね。別のOSで試すとか、あきらめるしかないのかなぁ。がっかり。
CentOS5.4でCPANを更新すると警告が大量に出た
えらいことになった。
とりあえずTerm::ReadKeyを入れればいいらしい
[root@localhost ~]# cpan Sorry, we have to rerun the configuration dialog for CPAN.pm due to some missing parameters... Normally CPAN.pm keeps config variables in memory and changes need to be saved in a separate 'o conf commit' command to make them permanent between sessions. If you set the 'auto_commit' option to true, changes to a config variable are always automatically committed to disk.Always commit changes to config variables to disk? [no] A Build.PL is run by perl in a separate process. Likewise we run './Build' and './Build install' in separate processes. If you have any parameters you want to pass to the calls, please specify them here. Typical frequently used settings: --install_base /home/xxx # different installation directory Parameters for the 'perl Build.PL' command? [] Parameters for the './Build' command? Setting might be: --extra_linker_flags -L/usr/foo/lib # non-standard library location Your choice: [] Do you want to use a different command for './Build install'? Sudo users will probably prefer: su root -c ./Build or sudo ./Build or /path1/to/sudo -u admin_account ./Build or some such. Your choice: [./Build] Parameters for the './Build install' command? Typical frequently used setting: --uninst 1 # uninstall conflicting files Your choice: [] Please remember to call 'o conf commit' to make the config permanent! Constant subroutine __USE_POSIX undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 8, line 5. Constant subroutine __USE_POSIX2 undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 9, line 5. Constant subroutine __USE_POSIX199309 undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 10, line 5. Constant subroutine __USE_POSIX199506 undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 11, line 5. Constant subroutine __USE_XOPEN undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 12, line 5. Constant subroutine __USE_XOPEN_EXTENDED undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 13, line 5. Constant subroutine __USE_UNIX98 undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 14, line 5. Constant subroutine __USE_LARGEFILE undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 16, line 5. Constant subroutine __USE_LARGEFILE64 undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 17, line 5. Constant subroutine __USE_FILE_OFFSET64 undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 18, line 5. Constant subroutine __USE_BSD undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 19, line 5. Constant subroutine __USE_SVID undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 20, line 5. Constant subroutine __USE_MISC undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 21, line 5. Constant subroutine __USE_GNU undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 23, line 5. Constant subroutine __USE_REENTRANT undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 24, line 5. Constant subroutine _POSIX_SOURCE undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 49, line 5. Constant subroutine _POSIX_C_SOURCE undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 51, line 5. Constant subroutine _XOPEN_SOURCE undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 53, line 5. Constant subroutine _XOPEN_SOURCE_EXTENDED undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 55, line 5. Constant subroutine _LARGEFILE64_SOURCE undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 57, line 5. Constant subroutine _LARGEFILE_SOURCE undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 104, line 5. Constant subroutine __USE_ISOC99 undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 108, line 5. Constant subroutine __GNU_LIBRARY__ undefined at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/features.ph line 156, line 5. cpan shell -- CPAN exploration and modules installation (v1.9402) Enter 'h' for help. Can't ioctl TIOCGETP: 無効な引数です Consider installing Term::ReadKey from CPAN site nearby at http://www.perl.com/CPAN Or use perl -MCPAN -e shell to reach CPAN. Falling back to 'stty'. If you do not want to see this warning, set PERL_READLINE_NOWARN in your environment.
どうやらTerm::ReadKeyというものが必要なようなので、いれてみる。
cpan[1]> install Term::ReadKey CPAN: Storable loaded ok (v2.15) Going to read '/root/.cpan/Metadata' Database was generated on Tue, 15 Dec 2009 08:56:54 GMT Running install for module 'Term::ReadKey' Running make for J/JS/JSTOWE/TermReadKey-2.30.tar.gz CPAN: checksum security checks disabled because Digest::SHA not installed. Please consider installing the Digest::SHA module. CPAN: Time::HiRes loaded ok (v1.9717) Scanning cache /root/.cpan/build for sizes ............................................................................DONE CPAN: Compress::Zlib loaded ok (v1.42) CPAN: Archive::Tar loaded ok (v1.54) TermReadKey-2.30/ TermReadKey-2.30/genchars.pl TermReadKey-2.30/Makefile.PL TermReadKey-2.30/Configure.pm TermReadKey-2.30/test.pl TermReadKey-2.30/ReadKey.pm TermReadKey-2.30/META.yml TermReadKey-2.30/ReadKey.xs TermReadKey-2.30/ppport.h TermReadKey-2.30/MANIFEST TermReadKey-2.30/README CPAN: File::Temp loaded ok (v0.22) CPAN: YAML loaded ok (v0.70) CPAN.pm: Going to build J/JS/JSTOWE/TermReadKey-2.30.tar.gz Checking if your kit is complete... Looks good Writing Makefile for Term::ReadKey cp ReadKey.pm blib/lib/Term/ReadKey.pm AutoSplitting blib/lib/Term/ReadKey.pm (blib/lib/auto/Term/ReadKey) /usr/bin/perl -I/usr/lib/perl5/5.8.8 genchars.pl Writing termio/termios section of cchars.h... Done. Checking for sgtty... Sgtty NOT found. Writing sgtty section of cchars.h... Done. /usr/bin/perl /usr/lib/perl5/5.8.8/ExtUtils/xsubpp -noprototypes -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap ReadKey.xs > ReadKey.xsc && mv ReadKey.xsc ReadKey.c gcc -c -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -DVERSION=\"2.30\" -DXS_VERSION=\"2.30\" -fPIC "-I/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE" ReadKey.c /bin/sh: gcc: command not found make: *** [ReadKey.o] エラー 127 JSTOWE/TermReadKey-2.30.tar.gz /usr/bin/make -- NOT OK Running make test Can't test without successful make Running make install Make had returned bad status, install seems impossible Failed during this command: JSTOWE/TermReadKey-2.30.tar.gz : make NO
makeに失敗しました。
しかたがないのでyumからいれてみることに
[root@localhost ~]# yum install perl-Term-ReadKey Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * addons: rsync.atworks.co.jp * base: rsync.atworks.co.jp * extras: rsync.atworks.co.jp * updates: rsync.atworks.co.jp Setting up Install Process No package perl-Term-ReadKey available. Nothing to do
orz=3
えっと、あとはどうすればいいんだろう?
Net::Amazonをインストールしてみる
Windowの場合、CPANではNOT OKがでるけど、ppmで簡単に追加できた。
Linux(CentOS)の場合、cpanではNOT OKが大量に出て、個別にモジュールを入れていっても、開発系のライブラリがほとんど入ってないためか、それぞれがNOT OKになってしまう。
結局yumから1つづつ入れていくことになった。
perl-XML-DOM
perl-DIgest-SHA
libxml2
libxml2-devel
Sys-Syslog
perl-Log-Log4perl
んだけど、ログに関するライブラリが入らない。
よくよく見ればCPANの起動時にBundle::CPANを入れろと書いてあるではないか。そういうことならと入れてみる。
何事もなく無事に終了し、Net::Amazonも難なく入った。
結局何が問題なのかって、Bundle::CPANを入れてなかったことだけが問題だったのかもしれない。
Image::Magick::Thumbnail::Simple 0.12 原文
「翻訳」ではなく「原文」なのは、私が作ったモジュールだからです。
Image::Magick::Thumbnail::Simpleモジュールのバージョンは0.12です。
目次
名前
Image::Magick::Thumbnail::Simple – サムネイル画像を無駄なく簡単に作ります
構文
ファイルに出力
use Image::Magick::Thumbnail::Simple;
my $t = new Image::Magick::Thumbnail::Simple;
$t -> thumbnail(
input => 'input.jpg',
output => 'output.jpg',
size => 128,
) or die $t -> error;
標準出力に出力
use Image::Magick::Thumbnail::Simple;
my $t = new Image::Magick::Thumbnail::Simple;
binmode STDOUT;
print "Content-type: image/jpegnn";
$t -> thumbnail(
input => 'input.jpg',
output => 'jpg:-',
size => 128,
) or die $t -> error;
初期化のときに指定する場合
別に指定しないかぎり、以降全てに継承されます。
$t = new Image::Magick::Thumbnail::Simple(
size => 128,
blur => 0.8,
quality => 80,
);
変更する場合
$t -> size( 128 ); $t -> blur( 0.8 ); $t -> quality( 80 );
個別に指定する場合
入力と出力は、個別にしか指定できません。
$t -> thumbnail(
input => 'input,jpg',
output => 'output.jpg',
size => 128,
blur => 0.8,
quality => 80,
);
サムネイル画像の横幅
$width = $t -> width;
サムネイル画像の縦幅
$height = $t -> height;
説明
Image::Magickを使って、簡単にサムネイル画像を作成できます。
基本的な設定はImage::Magickと同じです。画像のリサイズの処理のみを扱います。
公開したバージョンは0.10です。
0.12では、説明の修正と、サムネイルのサイズを返すようになりました。
参照
Image::Magick
作者
Satoshi Ishikawa <cpan@penlabo.net>
著作とライセンス
Copyright (C) 2008 Satoshi Ishikawa
このライブラリはフリーソフトウェアです。
Perl自体と同じ条件で再配付、または変更することができます。
利用可能なPerlのバージョンは5.8.8、またはこれ以降のバージョンです。
更新履歴
- 2008-04-03
- 公開
HTML::AA 0.10 原文
「翻訳」ではなく「原文」なのは、私が作ったモジュールだからです。
HTML::AAモジュールのバージョンは0.10です。
なお、perlmanの内容とは異なります。次期バージョン(UTF-8対応予定)であわせます。
コードの説明は、PHPのHTML/AAパッケージの方が詳しいです。
構文はほぼ同じなので読み替えてください。
モジュールのバグについて
以下のような指摘を頂きましたので掲載しておきます。(2010-02-17記)
# 名無しさん Says: 2月 17th, 2010 at 2:49 PM e エントリとは関係ないですが、バグ報告です。 PerlのHTML::AAにおいて、文字の0を数字とみなすことによって エラーが発生します。 270 my @array; 271 while($str) { 272 $str =~ s/(.)//; を 270 my @array; 271 while($str ne ”) { 272 $str =~ s/(.)//; にするとうまくいきましたので、ご報告まで。
説明
HTML::AAはPerlのモジュールです。
AAはアスキーアート(Ascii Art)と同じ要領で、アスキーアジャスト(Ascii Adjust)を行います。
このモジュールは、ブラウザに表示する文字列を整形する機能を有します。
アスキーアートほどの表現力はありませんが、文字列の横ピクセル数を計算したり、面倒な右揃え等の整形をすることが出来ます。
このモジュールは、UnitedDevicesの日報支援サイト「UD-Team2ch 404」を作ったことがきっかけです。
UTF-8への対応も予定しておりますので、しばらくお待ちください。
ご意見、ご感想は、モジュール内に記載されているメールアドレスまでお寄せください。
元はWWW::AAとして公開しておりましたが、カテゴリが違うという判断から0.10よりHTML::AAに変更いたしました。
特徴
罫線表示が必要な場合に有効な、指定サイズ(罫線の倍数)の倍数での最小サイズを求めるshorter_multipleを実装しています。
注意
エンコードはEUC-JP、Shift_JISに対応しています。
作者は英語が全然出来ないので、翻訳ソフトにかけた英文で記述されています。
解説は、このページが一番詳しく、判りやすいと思います。
文字コードが異なる場合には、正常な結果を得ることができません。
MS Pゴシック12ポイントで表示した場合に限り、正常に表示できると予想されます。
文字列の先頭に半角スペースが出力された場合、それが行頭になるとずれる現象が発生します。
詳しくは、アスキーアートを紹介しているサイト等を参考にしてください。
原則、日本語の文字(概ね2バイト文字)のみの入力においてのみ正常な動作を保証いたしますが、半角スペース以外は正常に動作することを確認しています。
文字列内に半角スペースの連続が混入している場合、表示の際にずれます。対策処理を検討中。
解説
アスキーコードで正規表現を利用していますが、主要な部分は次の通りです。
判別しやすいように、文字のままで表記しています。
これは、プロトタイプとしてJavaScriptで作成したものを少し修正したものです。
my $str = shift; my $count = 0; $count += 15 * ($str =~ s/ー|M|m|あ|い|お|け|す|そ|ぞ|た|だ|つ|づ|に|ひ|び|ぴ|ん|ウ|オ|ガ|キ|ギ|グ|ケ|ゲ|ズ|セ|ダ|チ|ヂ|ヅ|デ|ナ|ニ|ネ|ヘ|ベ|ペ|ホ|ボ|ポ|ユ|ワ|ヴ//g); $count += 14 * ($str =~ s/え|き|ぎ|ご|ざ|ち|ぢ|て|で|ど|な|ま|ゃ|ゅ|よ|る|ろ|ゎ|を|ア|エ|ゴ|シ|ジ|ス|ゾ|ツ|テ|ビ|ピ|ブ|プ|マ|モ|レ|ロ|ン//g); $count += 13 * ($str =~ s/O|Q|ぃ|ぉ|ぐ|こ|っ|も|ら|イ|ォ|カ|ク|コ|ソ|ヌ|フ|ャ|ュ|ラ|ヲ//g); $count += 12 * ($str =~ s/M|W|m|ヽ|ヾ|ゝ|B|C|D|G|H|K|N|R|S|U|w|ぁ|ぇ|さ|し|じ|と|ょ|り|ァ|ゥ|ェ|タ|ッ|ヒ|メ|ヨ|リ|ヮ|ヵ|ヶ//g); $count += 11 * ($str =~ s/@|C|G|O|Q|サ|ム|ヤ|ル|、|。|,|.|ゞ|0|1|2|3|4|5|6|7|8|9|A|E|P|V|う|ド|ノ|ミ| //g);# ←最後に全角スペースがあります $count += 10 * ($str =~ s/&|A|B|D|H|K|N|P|R|S|U|V|X|w|ー|ア|ウ|エ|オ|キ|ケ|ス|セ|チ|ツ|テ|ナ|ニ|ネ|ハ|ヘ|ホ|マ|モ|ユ|F|J|L|T|X|Y|Z|b|d|h|k|n|o|p|q|u|ぅ|ィ|ト|ョ//g); $count += 9 * ($str =~ s/E|F|J|L|T|Y|Z|a|c|e|g|s|く|ヲ|イ|カ|ク|コ|シ|ソ|タ|ヌ|フ|ラ|レ|ロ|ワ|ン//g); $count += 8 * ($str =~ s/a|b|c|d|e|h|n|o|p|q|u|v|y|"|#|$|%|*|+|-|/|0|1|2|3|4|5|6|7|8|9|<|=|>|\|ァ|ゥ|ェ|ォ|ャ|ュ|ッ|ノ|ヒ|メ|ヨ|リ|・|:|;|゛|゜|´|`|¨|^|‐|‘|’|“|”|(|)|〔|〕|[|]|{|}|〈|〉|《|》|「|」|『|』|【|】|†|‡|¶|v|x|y|z//g); $count += 7 * ($str =~ s/?|^|`|g|k|s|x|z|~|「|」|・|ィ|ョ|ト|ミ|。|、//g); $count += 6 * ($str =~ s/r|t|r//g); $count += 5 * ($str =~ s/(|)|[|]|_|f|f|t| //g);# ←最後に半角スペースがあります $count += 4 * ($str =~ s/!|I|j|{|||}|゙|゚|I|i|j|l//g); $count += 3 * ($str =~ s/'|,|.|:|;|i|l//g); $count += 16 * ($str =~ s/../g); return $count;
文字とそのドット数(ピクセル数)の関連性は、「アスキーアート」で検索したページで、解説が見つかると思います。
使い方(EUC-JPの場合)
use HTML::AA; my $aart = new HTML::AA; #------------------- モジュールが処理をする文字コードを指定します。EUC-JPならuec、Shift_JISならsjis $aart -> code('euc'); my $dot; my $str = '整形したい文字列です。'; my @str = ('整形したい文字列です。','このような感じで整形することが出来ます。'); print qq|Content-type: text/html; charset=EUC-JPnn|; print qq|<body>n|; print qq|HTML::AAのサンプルです。<br>n|; #------------------- 文字列のドット数を求める print qq|<br>n文字列のドット数を求める<br>n|; # 文字コードを引数で指定する場合 $dot = $aart -> calcu($str, 'euc'); printf qq|「%s」のドット数は、%dです。<br>n|, $str, $dot; #------------------- 指定したドット数で整形する(undefではなく''空値を指定すること) print qq|<br>n指定したドット数で整形する<br>n|; # $strと''の間に調整ドットを右寄せで整形 printf qq|│%s│<br>n|, $aart -> adjust($str, '', 'R', 350); # $strと''の間に調整ドットを左寄せで整形 printf qq|│%s│<br>n|, $aart -> adjust($str, '', 'L', 350); # ''と$strの間に調整ドットを右寄せで整形 printf qq|│%s│<br>n|, $aart -> adjust('', $str, 'R', 350); # ''と$strの間に調整ドットを左寄せで整形 printf qq|│%s│<br>n|, $aart -> adjust('', $str, 'L', 350); # $strと$strの間に調整ドットを右寄せで整形 printf qq|│%s│<br>n|, $aart -> adjust($str, $str, 'R', 350); # $strと$strの間に調整ドットを左寄せで整形 printf qq|│%s│<br>n|, $aart -> adjust($str, $str, 'L', 350); #------------------- 配列内の文字列が揃う最小のドット数を求める print qq|<br>n配列内の文字列が揃う最小のドット数を求める<br>n|; $dot = $aart -> shorter(@str); printf qq|│%s│<br>n|, $aart -> adjust($_, '', 'R', $dot) foreach @str; printf qq|│%s│<br>n|, $aart -> adjust($_, '', 'L', $dot) foreach @str; printf qq|│%s│<br>n|, $aart -> adjust('', $_, 'R', $dot) foreach @str; printf qq|│%s│<br>n|, $aart -> adjust('', $_, 'L', $dot) foreach @str; print qq|</body>n|;
結果は次のとおりです。
HTML::AAのサンプルです。
文字列のドット数を求める
「整形したい文字列です。」のドット数は、162です。
指定したドット数で整形する
│整形したい文字列です。 .│
│整形したい文字列です。. │
│ .整形したい文字列です。│
│. 整形したい文字列です。│
│整形したい文字列です。 .....整形したい文字列です。│
│整形したい文字列です。..... 整形したい文字列です。│
配列内の文字列が揃う最小のドット数を求める
│整形したい文字列です。 .│
│このような感じで整形することが出来ます。│
│整形したい文字列です。. │
│このような感じで整形することが出来ます。│
│ .整形したい文字列です。│
│このような感じで整形することが出来ます。│
│. 整形したい文字列です。│
│このような感じで整形することが出来ます。│
動作サンプル
補足
各バージョンごとに使い方が変わると思います。ご注意ください。
$aart -> code(‘euc’);で文字コードを指定しない場合は、初期値のEUC-JPで処理されます。
宣言は何度でも行えます。その宣言は、それより後の処理で使用される文字コードに反映されます。
個別にコードを指定する使用方法があります。興味のある方はソースを見てください。
インストール方法
プロンプトにて、「cpan install HTML::AA」とすることでインストールできます。
または、CPANよりダウンロードできます
おまけ(Excite翻訳にかける前の原文)
#------------------------------------------------------------------------------- # モジュール宣言 #------------------------------------------------------------------------------- sub new {} #------------------------------------------------------------------------------- # 文字コードを宣言します #------------------------------------------------------------------------------- my $code = 'euc'; #------------------------------------------------------------------------------- # モジュールが処理する文字コードを宣言します # 文字コードを指定しない呼び出しで有効です # EUC-JPで処理したいならeuc # $aart -> code('euc'); # Shift_JISで処理したいならsjis # $aart -> code('sjis'); #------------------------------------------------------------------------------- sub code {} #------------------------------------------------------------------------------- # ドット数を計算します # $aart -> calcu($str); #------------------------------------------------------------------------------- sub calcu {} # 文字コード宣言を無視してEUC-JPで処理したい時 # $aart -> calcu_euc($str); sub calcu_sjis {} # 文字コード宣言を無視してShift_JISで処理したい時 # $aart -> calcu_sjis($str); sub calcu_sjis {} #------------------------------------------------------------------------------- # 文字列の変数を1文字の配列に分解します # $aart -> divide($str); #------------------------------------------------------------------------------- sub divide {} # 文字コード宣言を無視してEUC-JPで処理したい時 # $aart -> divide_euc($str); sub divide_euc {} # 文字コード宣言を無視してShift_JISで処理したい時 # $aart -> divide_sjis($str); sub divide_sjis {} #------------------------------------------------------------------------------- # 調整ドットを加えた文字列を返します # $aart -> adjust($str_l, $str_r, position, $size); #------------------------------------------------------------------------------- sub adjust {} # 配置'R'と文字コード宣言を無視してEUC-JPで処理したい時 # $aart -> adjust_right_euc($str_l, $str_r, $size); sub adjust_right_euc {} # 配置'L'と文字コード宣言を無視してEUC-JPで処理したい時 # $aart -> adjust_left_euc($str_l, $str_r, $size); sub adjust_left_euc {} # 配置'R'と文字コード宣言を無視してShift_JISで処理したい時 # $aart -> adjust_right_sjis($str_l, $str_r, $size); sub adjust_right_sjis {} # 配置'L'と文字コード宣言を無視してShift_JISで処理したい時 # $aart -> adjust_left_sjis($str_l, $str_r, $size); sub adjust_left_sjis {} #------------------------------------------------------------------------------- # 配列の文字列が揃う最小ドット数を返します # $aart -> shorter(@array); #------------------------------------------------------------------------------- sub shorter {} # 文字コード宣言を無視してEUC-JPで処理したい時 # $aart -> shorter_euc(@array); sub shorter_euc {} # 文字コード宣言を無視してShift_JISで処理したい時 # $aart -> shorter_sjis(@array); sub shorter_sjis {} #------------------------------------------------------------------------------- # 配列の文字列が揃う指定された数の倍数に当たる最小ドット数を返します # ($minimun, $magnification) = $aart -> shorter_multiple($width, @arrayL, @arrayR); #------------------------------------------------------------------------------- sub shorter_multiple {} # 文字コード宣言を無視してEUC-JPで処理したい時 # ($minimun, $magnification) = $aart -> shorter_multiple_euc($width, @arrayL, @arrayR); sub shorter_multiple_euc {} # 文字コード宣言を無視してShift_JISで処理したい時 # ($minimun, $magnification) = $aart -> shorter_multiple_sjis($width, @arrayL, @arrayR); sub shorter_multiple_sjis {}
更新履歴
- 2010-02-17
- バグの指摘を掲載
- 2008-04-03
- サイト移動に伴うHTMLの修正(旧URI:[廃止])
- 2006-10-10
- WWW::AAというカテゴリがおかしいと判明したので、HTML::AAに変更 バージョンを0.10
- 2006-10-04
- 動作速度が向上するように変更 バージョン0.06
- 2006-10-09
- エスケープシーケンスを1文字としていたのを除去(文字列から削除)に変更。Shift_JISに対応。バージョン0.05
- 2006-10-04
- 翻訳の見直しと共に、原文を掲載。ローカルのファイルでは文字列を1文字の配列にする機能を追加。
- 2006-09-29
- WWW::AAサンプルを追加
- 2006-09-28
- コメントをばっさり削除、エラーが出ないように補正、見た目の修正と、コメントの強化などで0.02にバージョンアップ
- 2006-09-27
- プロトタイプとしてWWW:AA0.01をCPANに登録
GD::Arrow 0.01 妙日本語訳
この妙日本語訳はエキサイト翻訳:英語翻訳を利用しつつ、のーみそコネコネして作成しました。
GD::Arrowモジュールのバージョンは0.01です。
目次
名前
GD::Arrow – GDを利用して矢印を描画する
概略
use GD; use GD::Arrow; my $width = 8; my ($x1, $y1) = (100, 10); my ($x2, $y2) = (100, 190); my ($x3, $y3) = (10, 30); my ($x4, $y4) = (190, 75); my $arrow = GD::Arrow::Full->new( -X1 => $x1, -Y1 => $y1, -X2 => $x2, -Y2 => $y2, -WIDTH => $width, ); my $image = GD::Image->new(200, 200); my $white = $image->colorAllocate(255, 255, 255); my $black = $image->colorAllocate(0, 0, 0); my $blue = $image->colorAllocate(0, 0, 255); my $yellow = $image->colorAllocate(255, 255, 0); $image->transparent($white); $image->filledPolygon($arrow,$blue); $image->polygon($arrow,$black); my $half_arrow_1 = GD::Arrow::LeftHalf->new( -X1 => $x3, -Y1 => $y3, -X2 => $x4, -Y2 => $y4, -WIDTH => $width, ); my $half_arrow_2 = GD::Arrow::LeftHalf->new( -X1 => $x4, -Y1 => $y4, -X2 => $x3, -Y2 => $y3, -WIDTH => $width ); $image->filledPolygon($half_arrow_1,$blue); $image->polygon($half_arrow_1,$black); $image->filledPolygon($half_arrow_2,$yellow); $image->polygon($half_arrow_2,$black); open IMAGE, "> image.png" or die $!; binmode(IMAGE, ":raw"); print IMAGE $image->png; close IMAGE; exit(0);
説明
これは2点の間に矢を描くのに使用される、GD::polygonのサブクラスです。 GD::Arrow::Full 2点の間に完全な矢を描きます。 |\ +----------------------+ \ (X2, Y2) * * (X1, Y1) +----------------------+ / |/ GD::Arrow::RightHalf 2点の間に半分の矢を描きます。 (X2, Y2) *-------------------------* (X1, Y1) +----------------------+ / |/ GD::Arrow::LeftHalf 2点の間に半分の矢を描きます。 |\ +----------------------+ \ (X2, Y2) *-------------------------* (X1, Y1)
参照
GD::Polygon
クレジット
The equations used to determine the critical verticies to represent a GD::Arrow
2点からGD::Arrowのために使用される方程式は、オノヒデキのmakefeedmapソフトウェアに基づいています。
Makefeedmapは、http://www.ono.org/software/makefeedmap/で参照することができます。
作者
Todd Caine, <todd@pobox.com>
著作とライセンス
Copyright 2004 by Todd Caine
このライブラリはフリーソフトウェアです。
Perlと同じ条件で再配布、または変更することが出来ます。
更新履歴
- 2008-04-03
- サイト移動に伴うHTMLの修正(旧URI:[廃止])
- 2006-06-13
- 公開