Perl

WWW::Mechanize のメモリ消費量について

WWW::Mechanizeは、通常の利用範囲ならば、メモリ消費量について問題にはならないと思う。 しかし、一回の実行で、数千回以上の URL アクセスを繰り返すようならば、WWW::Mechanize のメモリ消費量を考慮すべきである。考慮しないと、そのうちに Out of Memo…

Windows 版 ActivePerl で ImageMagick を使えるようにする

Windows 版の ActivePerl は PPM(Perl Package Manager) から ImageMagick を利用できるようにすることができる。そのおかげで、単体で ImageMagick をインストールする必要がない。 1.まずは、DOS プロンプトから PPM を起動する DOS プロンプトが開いたら…

インスタンス変数の配列を初期化・再初期化を行う

クラス化したモジュール内をインスタンス化し、インスタンス変数内の配列を初期化・再初期化する際の備忘録。 #!/usr/bin/env perl use strict; use warnings; use utf8; use Data::Dumper; { package Array::Test; use strict; use warnings; sub new { my …

配列の初期化と再初期化、そしてリファレンスとデリファレンスについて

備忘録。 制御構文内で配列のリファレンスを再初期化したいときに、思う通りに再初期化できないので、簡単な動作結果を確認する。 #!/usr/bin/env perl use strict; use warnings; use utf8; use Data::Dumper; # 配列のリファレンス用に変数を宣言する my $…

文字数を数えてみる

#!/usr/bin/env perl use strict; use warnings; use utf8; use Encode; # 外部から入力された文字ならば、decode して Perl の内部文字列にする my $hiragana = 'あいうえお'; my $hiragana_and_numeric = '01234と56789'; print encode('utf-8', "ひらがな…

Perl のテンプレートエンジン Tenjin の文字化け対策 改

前回(Perl のテンプレートエンジン Tenjin の文字化け対策)修正した内容では、テンプレートキャッシュがない場合、文字化けした HTML ファイルが出力される問題があったので、その修正を施した。修正箇所は次の通り。 Tenjin.pm の修正箇所 use utf8; use En…

オブジェクトに任意のメソッドが存在するか確認をする

use strict; use warnings; use Sample; my $yourclass = Sample->new(); if ($yourclass->can('yourmethod')) { print "yourmethod is given\n"; } else { print "yourmethod is not given\n"; } can は Perl でオブジェクトを扱うときのユニバーサル・メソ…

Perl で配列とハッシュをネストしたときの書き方

他の言語だと、配列にハッシュを、ハッシュに配列をネストするときに、リファレンスで代入したりするなど、いざ使うときに混乱するので、サンプルコードを残しておく。 配列にハッシュをネストさせたものを、ハッシュに配列をネストさせたものにする場合 #!/…

Perl のテンプレートエンジン Tenjin の文字化け対策

Tenjin は他のテンプレートエンジンと比較して動作が速いということで、試しに使ってみた。 しかし、テンプレートに含まれる日本語が文字化けしてしまう。 Tenjin の特徴として、 Ability to set the encoding of your templates is added. や encoding - An…

cron で Perl スクリプト実行時に Can't locate My/Module.pm in @INC 等のエラーが出る

独自のモジュールを読み込ませて cron を実行するとエラーが出る場合がある。 原因は cron が実行する際のディレクトリが、cron の実行ユーザーのホームディレクトリになるため、任意のディレクトリを @INC に設定していてもエラーが発生する。 モジュールの…

Mac OS X に HTML::Tidy がインストールできるといいな

パッチをあてて HTML::Tidy のインストールを試してみる まずは HTML::Tidy のソースをダウンロードする。 % mkdir ~/src % cd src % wget http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/HTML-Tidy-1.08.tar.gz --2010-03-09 23:46:54-- http://sea…

Mac OS X で HTML::Tidy 再び

MacOS X には HTML::Tidy はインストールできないのか で HTML::Tidy のインストールに失敗すると書いた。先日、delphinus35 さんから、MacPorts を利用して Tidy をインストールされる際に生成される libtidy.a を使えば、HTML::Tidy をインストールできる…

Perl で簡単なクラスを作成して動作を確認してみる

これまで、Perl でクラスを作成する必要はなかったのだが、HTML::Parser を継承したクラスを使うといろいろ便利そうなので、試してみた。 サンプルのクラス Sample.pm として保存する。 package Sample; use strict; sub new { my ($class, $a, $b, $c) = @_…

XML::FeedPP で RSS を出力する

PP は Pure Perl の略のようで、コンパイルする必要がないモジュールのため、レンタルサーバーでも利用することができる。 サンプルコード #!/usr/bin/env perl use strict; use warnings; use utf8; use Encode; use DateTime; use XML::FeedPP; use Data::…

MacOS X には HTML::Tidy はインストールできないのか

まずは普通にインストールをしてみて失敗をする % cpan -i HTML::Tidy Failed 18/20 test scripts. 68/75 subtests failed. Files=20, Tests=75, 1 wallclock secs ( 0.59 cusr + 0.15 csys = 0.74 CPU) Failed 18/20 test programs. 68/75 subtests failed.…

Log4Perl でファイルとメールにログを残す

log4perl でファイルにログを残すのと、任意のレベル以上のエラーが発生した場合はメールを送信するように設定する。 簡易な設定ファイルの内容 log4perl.rootLogger = DEBUG, LogAppender, MAILER log4perl.appender.LogAppender = Log::Log4perl::Appender…

Yahoo Web API の返り値を XML で受け取って Perl で処理をする

「Yahoo Web API の返り値を JSON で受け取って Perl で処理をする」の改良版。 #!/usr/bin/env perl use strict; use warnings; use utf8; use Encode; use LWP::UserAgent; use Data::Dumper; use URI::Escape; use XML::Simple; my $yahoo_app_id = 'your…

Yahoo Web API の返り値を JSON で受け取って Perl で処理をする

JSON は JavaScript での処理を前提にしたものが多く、Perl などほかの言語で処理をする場合のサンプルがなかったので、記しておく。 #!/usr/bin/env perl use strict; use warnings; use utf8; use Encode; use JSON; use LWP::UserAgent; use Data::Dumper…

Net::Amazon を使う

2009年8月に Amazon のAPI が変更になり、認証が必要になってから初めて Amazon の API を利用する。 サンプルコードは下記のようになる。詳細なメソッドの説明は Net::Amazon の perldoc を参照する。 #!/usr/bin/env perl use strict; use warnings; use u…

Perl で配列から特定の要素のみを抽出する

#!/usr/bin/env perl my @numbers = (0, 1, 2, 3, 4, 5); my ($zero, $one, $two, $three, $four, $five) = @numbers; printf("%d, %d, %d, %d, %d, %d\n", $zero, $one, $two, $three, $four, $five); my ($this_is_one, $this_is_three, $this_is_five) = …

正規表現をコンパイルする場合のグローバルオプション(全件マッチ)の使用について

グローバルオプションを示す'g'は、正規表現のコンパイル時には付加できません。例えば、次のような記述はエラーになります。 http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A1%E3%83%A2%2F%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%81%AE%E3%82%B3%E3%8…

さくらに local::lib を利用して個人用 CPAN を使えるようにする

local::lib をダウンロードする % mkdir -p ~/local/var/db/pkg % wget http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/authors/id/A/AP/APEIRON/local-lib-1.004009.tar.gz % tar zxvf local-lib-1.004009.tar.gz % cd local-lib-1.004009/ BSDPAN のエラー…

Windows版 Perl で挿入した改行が \r\n になってしまう

#!/bin/env perl open my $out, '>', 'test.txt'; # 改行が \n ではなく、\r\n になってしまう print $out 'Windows 版の Perl だと改行が \\r\\n になってしまう', "\n"; close $out; binmode でファイルポインタを指定すれば解決する 標準入出力やオープン…

期間内の日付が、年初から第何週にあたるのか、また何曜日にあたるのか簡単に調べる

以下の記録を組み合わせただけ。 日付から期間を計算する 日付が何曜日、何日、年初から何日め、年初から何週めになるかを求める #!/bin/env perl use strict; use warnings; use Date::Calc qw(Day_of_Week Week_Number Day_of_Year); use Date::Simple; my…

Windows 版 Perl で Oracle に接続をする

Perl で必要なモジュール DBI DBD::Oracle Oracle 側で必要なモジュール Oracle Instant Client ダウンロード instantclient basic instantclient sdk 参考サイト 改めてPerlからOracleに接続する方法のまとめ Windows 環境に DBD::Oracle をインストールす…

Oracle に接続するためにドライバをインストールする

# whereis p5-DBI p5-DBI: /usr/ports/databases/p5-DBI/Makefile # cd /usr/ports/databases/p5-DBI # make fetch-recursive # make install clean # whereis p5-DBD-Oracle # cd ../p5-DBD-Oracle/ # cd /usr/ports/databases/p5-DBI # make fetch-recursi…

Gentoo に CPAN 管理用のパッケージ g-cpan をインストールする

参考 g-cpan Guide g-cpan とは g-cpan is a tool that generates and installs perl modules and bundles from CPAN "on-the-fly". http://www.gentoo.org/proj/en/perl/g-cpan.xml#doc_chap1 When you run g-cpan, it will check for two configuration fi…

Perl で try 〜 catch 節を使ってみる

#!/usr/bin/env perl use strict; use warnings; use Encode; use Error qw(:try); my $div = shift || 0; # try {...} catch Error with {...} finally {...} の # {} はスコープを作るためのものです。 # See http://blog.livedoor.jp/dankogai/archives/5…

ユーザーディレクトリ下に local::lib を使って CPAN 環境を構築する

前準備 % mkdir src % cd src % wget http://ftp.nara.wide.ad.jp/pub/CPAN/authors/id/A/AP/APEIRON/local-lib-1.004001.tar.gz 最新版の local::lib は http://ftp.nara.wide.ad.jp/pub/CPAN/authors/id/A/AP/APEIRON/ で確認をする。 CPAN の設定をする。…

FreeBSD で Perl がアップグレードされた後に、CPAN モジュールが動かなくなった場合の対処

Perl がアップグレードされた後に、CPAN モジュールが動かなくなる原因は、古いバージョンの環境変数 @INC を参照しているのが原因である。 FreeBSD では、古いバージョンの Perl から新しいバージョンの Perl へ CPAN モジュール群を読み込む @INC と、/var…