Perl

Parallel::ForkManager のサンプル

#!/usr/bin/env perl use strict; use warnings; use Getopt::Long; use Parallel::ForkManager; GetOptions( 'h|help' => \my $help, 'p|process=i' => \my $process, 'verbose' => \my $verbose, ) or pod2usage(); pod2usage() if $help; my $pm = Parall…

Coro で WWW::Mechanize を使ってみる

#!/usr/bin/env perl use strict; use warnings; use Coro; use Coro::LWP; use Data::Dumper; use WWW::Mechanize; my @coros = (); my @urls = qw|https://twitter.com/ https://www.pinterest.com/ http://www.apple.com/|; foreach my $url (@urls) { pu…

Perl で Redis を操作する簡単なサンプル

#!/usr/bin/env perl use strict; use warnings; use Redis; my $redis_host = '127.0.0.1'; my $redis_port = 6379; my $redis = Redis->new(server => sprintf('%s:%d', $redis_host, $redis_port)); # Use UNIX domain socket # my $redis = Redis->new(s…

SQL の IN 句を DBI のプリペアードステートメントで使う場合

my $dbh = DBI->connect(...); my @users = ('yamada', 'sato', 'suzuki', 'takahashi'); my @values = map {'?'} @users; my $place_holders = join ', ', @values; my $sql = sprintf('SELECT id, timestamp FROM sample WHERE users IN (%s);', $place_ho…

「シンプルなWebアプリを今、自分なりに書いてみる」を Mojolicious 4.0 に対応させてみた。

「シンプルなWebアプリを今、自分なりに書いてみる」が 2013年5月にリリースされた 4.0 に対応していないので、自分なりに書き直してみた。 修正したのは、Mojolicious::Controller で廃止された API を修正した。 #!/usr/bin/perl use Mojolicious::Lite; u…

cpanm をローカルディレクトリ内にインストールする際の設定

% mkdir -p ~/perl5/extlib/perl5 % echo 'export PERL_CPANM_OPT="--local-lib=~$HOME/perl5/extlib/perl5"' >> ~/.zshrc % echo 'export PERL5LIB="$HOME/perl5/lib:$HOME/perl5/extlib/perl5/lib/perl5:$PERL5LIB"' >> ~/.zshrc

多次元配列のネストした配列から重複した値を除く

#!/usr/bin/env perl use strict; use warnings; use 5.014; use Data::Dumper; my @duplicated_list = ( ['apple', 'banana', 'orange', 'strawberry', 'pineapple', 'grapefruit', 'grapefruit'], ['apple', 'banana', 'orange', 'strawberry', 'pineapple…

ハッシュをネストした配列で、ハッシュの特定のキーを基に重複した値を除く

#!/usr/bin/env perl use strict; use warnings; use 5.014; use Data::Dumper; my @duplicated_hash = ( {url => 'http://www.yahoo.co.jp.', title => 'Yahoo! Japan'}, {url => 'http://www.yahoo.co.jp.', title => 'Yahoo! Japan'}, {url => 'http://ww…

正規表現で全角文字(ひらがな・かたかな・漢字、記号など)、半角カタカナをマッチさせる

#!/usr/bin/env perl use strict; use warnings; use Encode; use utf8; # 全角文字、全角記号、全角英数字、半角カナを含めている my $strings = "Aあb漢Cイd字0ギ-ャ1ゃ213=~3\\^_%―$\"#\tわ\n−Z"; my @chars = split '', $strings; my $utf8 = find_enco…

FreeBSD の Perl がアップグレードされた場合の対応方法

おそらく vim をアップグレードしたタイミングで、Perl のバージョンもアップグレードしたようだ。これまで正常に動作していたスクリプトが、モジュールを読み込めないとエラーを出しているのに気が付いた。 「/usr/ports/UPDATE」を確認すると、 20130612: …

Amazon EC 2 で Amazon Linux AMI に cpanm で DBD::mysql をインストールする

その前提として、 perlbrew で独自に Perl をインストールしている cpanm を使ってインストールする というのがある。 DBD::mysql をインストールする おそらく DBD::mysql をインストールするのに失敗し、「~/.cpanm/build.log」をみるようにメッセージが出…

Windows 7 で Amon2 が動作するのか?

結論としては、Amon2 で作成した雛形内に cpanm をインストールするところから、進められていない。理由は、「Nmake15.exe が 64 bit に対応していない」からだ。 前提 今回試してみた環境は次の通り。 Windows 7 64 bit SP1 ActivePerl 5.14.2 この ActiveP…

Windows 版 ActivePerl で ImageMagick を使う

ActiveState の ActivePerl を使っていれば、ImageMagick のインストーラーが Image::Magick(PerlMagick)をインストールしてくれる。 手順としては 32bit か 64 bit の Windows 版 ActivePerl をインストールする。 Windows Binary の ImageMagick をインス…

さくらのレンタルサーバーに perlbrew を使って Perl をインストールする

以前作成した環境をすべて削除し、レンタル時の初期状態に戻してから perlbrew で Perl をインストールしたら、エラーが発生せずにインストールできた。 % curl -LO http://xrl.us/perlbrew % chmod u+x perlbrew % ./perlbrew install % cat perl5/perlbrew…

Perl 本体が落ちる

Windows 7 上で Perl を実行すると Perl.exe が初めてクラッシュした。思い当たることがなく、同じスクリプトを FreeBSD 上で実行すると Perl がクラッシュしてコアダンプを吐き出した。 % tail -f /var/log/messages Nov 18 13:43:49 myhost kernel: pid 83…

XAMPP の MySQL を利用して Perl の DBD::mysql をインストールできるか

結論としては、インストールできないといわざるを得ないと考える。理由としては、DBD::mysql をインストールするのに必要なファイルが、XAMPP の MySQL では不足しているからだ。 % cpanm DBD::mysql でインストールをすると、mysql_config のパスがわからな…

LWP::UserAgent で gzip, deflate のデータを受け取る

#!/usr/bin/env perl # 日本語 use strict; use warnings; use LWP::UserAgent; use HTTP::Message; use utf8; my $board_list_url = 'http://www.example.com/'; my $ua = LWP::UserAgent->new; my $can_accept = HTTP::Message::decodable; my $response =…

文字コードを変換する際に全角波ダッシュ「〜」を文字化けなしで変換する

$target 内の文字コードは Perl の内部文字コードに変換してある。 # Shift-JIS の全角波ダッシュを UTF-8 の全角波ダッシュに変換する $target =~ tr/\x{301c}\x{2212}/\x{ff5e}\x{ff0d}/; # UTF-8 の全角波ダッシュを Shift-JIS の全角波ダッシュに変換す…

画像を Base64 でエンコードする

画像を Base64 でエンコードすることの目的として、 Data URI スキーマを利用することでデータ(画像)のリクエスト回数を減らす。画像データを HTML 内に記述してしまう。 Base64 でエンコードされた画像を HTML 内に記述することで、応答するデータを圧縮す…

WWW::Mechanize と文字コード

WWW::Mechanize は、 HTTP レスポンスヘッダ部分の Content-type で設定されている charset HTTP レスポンスのボディに記述されている文字コードmeta 要素で設定されている Content-Type の charset を参照して、データの文字列を Perl 内部の文字列にデコー…

Slim3 の application_ja.properties に日本語を書くために UTF-16 LE を16進数で表現する

Slim3 の application_ja.properties にマルチバイトを記述するには、文字列を UTF-16LE に変換して16進数でダンプする必要があることに気が付いた。 この方法を Java でやる方法がわからなかったので、Perl で書いてみた。 #!/usr/bin/perl use strict; use…

WWW::Mechanize で HTTP ステータスによって die するのを回避する

通常の初期設定では、WWW::Mechanize は HTTP ステータスで 400 や 404 コードが返されると、WWW::Mechanize は die を起こして処理を中断してしまう。 そのため、400 や 404 コードが返された場合の処理が記述できない。 対応方法 use WWW::Mechanize; my $…

LWP::UserAgent の POST メソッドと 414 Request-URI Too Large コード

LWP::UserAgent の POST メソッドの間違った使い方 LWP::UserAgent の POST メソッドの間違った使い方をしていたため、レスポンスに「414 Request-URI Too Large」が返ってくる原因に気が付かなかった。 問題だったコード #!/user/bin/env perl use strict; …

lenght 関数の動作確認

Windows 上で動作を確認した。 #!/usr/bin/env perl # 日本語 use strict; use warnings; use Encode; use utf8; my $chars; while (<DATA>) { $chars = $chars . $_; } print encode('cp932', "Perl の内部文字コードの場合は lenght 関数は文字数を返す\n"); pri</data>…

さくらのレンタルサーバーで perlbrew を使って任意の Perl をインストールする

事前準備として 独自にローカルのディレクトリに CPAN モジュールをインストールして使っているような場合は、それらを使うのに必要だったパスを削除しておくこと。 初めてさくらのレンタルサーバーを使う場合は、特に必要ない。 capnminus をインストールす…

cpanm で DBD::mysql をインストールする

cpanm で DBI をインストールした際に、特に気になるエラーがなかったのに、DBI 経由で mysql に接続をすると、エラーが出た。 調べてみると、DBD::mysql が見つからないとエラーが出る。 % perl -MDBD::mysql -le 1 Can't locate DBD/mysql.pm in @INC (@IN…

cpanm で Image::Magick のインストールをする方法

その前に cpanm で Image::Magick をインストールする環境は次のようになっている。 perlbrew で Perl 5.12.1 をインストールしている cpanm は perlbrew のインストール時にインストールされたもの手動で入れても、適宜設定を自分の環境に読み替えれば、成…

cpanm で WWW::Mechanize インストールの失敗を回避した方法

追記あり その後、下記の回避方法を使わずに、WWW::Mechanize をインストールできた*1。 昨夜、perlbrew でインストールをした Perl 5.12.1 に CPAN モジュールを追加していたら、WWW::Mechanize の依存モジュールのインストールに失敗した。 エラーログが、…

Mac OS X に Perl 5.12 系をインストールする

いま Perl は MacPorts でインストールされた 5.8.9 を使っているが、さくらの VPS で使う Perl のバージョンを 5.12 にしたので、Mac OS X でも使えるようにしたいと考えるようになった。 MacPorts でインストールした Perl はバージョンアップしないほうが…

タイムスタンプを日付に、日付をタイムスタンプに変換する

#!/usr/bin/env perl use strict; use warnings; use utf8; use Time::Local; sub timestamp2date { my $timestamp = shift; my ($sec, $min, $hour, $day, $mon, $year) = localtime($timestamp); return sprintf('%04d-%02d-%02d %02d:%02d:%02d', $year +…