Perl

ChocolateyでStrawberry Perlが更新できない

chocolatey upgrade strawberryperlすると、 WARNING: Generic MSI Error. This is a local environment error, not an issue with a package or the MSI itself - it could mean a pending reboot is necessary prior to install or something else (like t…

Test::DifferencesでUTF-8文字列をエスケープせずに出力する方法

ドキュメントに書いてある、 Text::Diff の設定をどうこうする方法では駄目だったのでいろいろ調べた感じ、以下のようにすれば行けた。 use strict; use warnings; use utf8; use Data::Dumper; { package Data::Dumper; our $Useperl = 1; no warnings 'red…

use_okがprove -lで実行すると通るのにperl -Ilibで実行すると通らなかった話

use Test::More; use_ok 'Foo::Bar'; done_testing; みたいなテストを実行するとき、まあ普通は prove -l する。1アサートごとの結果を見たい場合も prove -lv とかでいいんだけど、このときは忘れてて perl -Ilib で実行した。 上のようなテストだと通るん…

plackup -Iで一貫性のないモジュール読み込みになる場合がある

plackup -Iは、perl -Iと同様にinclude pathを追加できるオプションなのだが、ちょっと特殊な挙動になっていて、問題が起きる場合がある。 plackup -Iでは、plackup自身の実行時に使用するモジュールのinclude pathは指定できない。これはまあ当然なのだが、…

YAPC::Kansai 2017に行ってきたのでトークの感想など

YAPC::Kansai 2017に行ってきました。去年のPHPカンファレンス大阪に続いて、カンファレンス2回目。今回は初懇親会も。とりあえず駅までのバス、停留所逆側で待ってて、一本逃がして開場前に余裕で着く予定がぎりぎりに。さらに、新大阪で下りてからだいぶ迷…

Cartonで詰んだっぽい?

Cartonの仕様上、site_perlになにか入ってるとcpanfile.snapshotが壊れる可能性がある。 Carton自体を入れるのにいくつかのモジュールがsite_perlに入る。 それらのモジュールのいずれかがcpanfile.snapshotでrequirementsに入っていると、carton checkがfai…

PerlでIPアドレスからホスト名をLookupするベターな方法。

gethostbyaddr()は使いにくいしどうもIPv6対応が怪しい。IO::Socket::IPはそろそろ標準モジュールに入るらしいが、それは普及にはもうちょっとかかるってことでもある。オーバースペックな気もする。ということで、普通にSocket.pm使ってみる。 use Socket q…

最近はまったこととか。

ちゃんと定期的にブログ書くのってむずかしいね。 Firefoxでcontenteditable="true"が奇妙な動作。HTMLの文法的に? 入力できないようなHTML文字列を貼り付けたりすると、変な位置に貼り付けられてしまい、またcontenteditableが効かなくなる。contenteditab…

XML::LibXMLでHTMLを扱うのはやめておいた方がよさそう。

HTML::Parserはあまり速くなかった気がするので、XML::LibXMLでHTMLを扱おうとしてはまった。XML::LibXMLは、load_html()みたいなメソッドもあるから大丈夫かなー、なんて思ったのが甘かった。 HTMLをパースして、データ構造にする。 データ構造を走査したり…

Test::Moreでマルチバイト文字列を出力する可能性がある場合。

use Test::More; use Term::Encoding; { my $builder = Test::More->builder; my $encoding = Term::Encoding::get_encoding; binmode $builder->output, ":encoding($encoding)"; binmode $builder->failure_output, ":encoding($encoding)"; binmode $buil…

HTTP::Body::MultiPartにまずいセキュリティホールがあるので、しばらくPlack::Request::Upload使うときは気をつける。

経緯 JVNのフィード見てたらPerlモジュールのセイキュリティホールがあったので念の為確認したら思ったより危険だった。 JVNのページ JVNDB-2013-005291 - JVN iPedia - 脆弱性対策情報データベース セキュリティホールの詳細 #721634 - libhttp-body-perl: …

Perlのsingle-quotedなヒアドキュメントはsingle-quotedな文字列とはちょっと違う。

ちょっとはまったので。 print '\ \\', "\n"; # \ \ print <<'HERE'; \ \\ HERE # \ \\ ヒアドキュメントでは、引用符自体のエスケープが必要なくなる。double-quotedなヒアドキュメントの場合、ほかにエスケープしなければならない文字が残るため\自体もエ…

plenv install ... で、別名をつけてインストールしたい。

目的 plenvで64bit環境に32bitのPerlをインストールしようとして、64bit版との区別をつけるために5.8.9-32bitとかそんな名前をつけたかった。ちなみに32bitのPerlのインストールには現状成功していない。 対処 plenvのドキュメントにわずかにそれらしいコマ…

Mail::SPFをroot権限がない状態で、cpanmでインストールしたい。

目的 Mail::SPFをインストールするためには、/usr/sbinへの書き込み権限が必要である。つまり大抵の場合、root権限が必要となる。だが、plenvを使っている環境などではsudo cpanm Mail::SPFとした場合、正しくインストールできない。そのため、root権限なし…