I'm looking for Perl module for parsing IPv6. I found NetAddr::IP on CPAN. It looks good for me. If you know other recommendations which you felt good, please let me know on comment form. Thanks in advance!
IPv6 を操作したいので Perl モジュールを探しています。NetAddr::IP は割と良さげでした。でももしオススメなモジュールをご存知でしたらコメント欄で教えてくださいね。
$ cpanm NetAddr::IP
$ perl -MNetAddr::IP -le 'print NetAddr::IP->new(q{FD00::1})->addr'
FD00:0:0:0:0:0:0:1
$ perl -MNetAddr::IP -le 'print NetAddr::IP->new(q{FD00::1})->short'
FD00::1
$ perl -MNetAddr::IP -le 'print NetAddr::IP->new(q{FD00::1})->full'
FD00:0000:0000:0000:0000:0000:0000:0001
$ perl -MNetAddr::IP -le 'print NetAddr::IP->new(q{FD00::1})->full6'
FD00:0000:0000:0000:0000:0000:0000:0001
$ perl -MNetAddr::IP -le 'print NetAddr::IP->new(q{FD00::1})->version'
6
$ perl -MNetAddr::IP -le 'print NetAddr::IP->new(q{128.0.0.1})->version'
4
Hmm, AnyEvent has a few methods for parsing IPv6, but these methods are embedded in AnyEvent::Socket.
AnyEvent なんかも見たんですが自前で IPv6 の実装が入っていましたわ。うーむ。
追記
ふむ。AnyEvent::Socket::parse_ipv6 では
sub parse_ipv6($) {
# quick test to avoid longer processing
my $n = $_[0] =~ y/://;
return undef if $n < 2 || $n > 8;
という感じで簡単な IPv6 アドレスのチェックをしていますね。これの方式でも IPv6 のアドレスの確認用途としては足りる気もします。
Abigael's Advent Calendar Day 0
Originally uploaded by Potjie
In Perl world, some famous advent calendars:
のを探していたら、ここのページにズバリありました。
・Perlスクリプトで得る方法
perl -e 'use Net::CIDR;foreach(Net::CIDR::cidr2octets("192.168.0.64/28")){print "$_\tREJECT\n"}'うちの環境では動きませんでした。
何かframeworkが入っていないからだと思います(^^ゞ
おそらく Net::CIDR がインストールされていなかったんだと想像しました。インストールは以下で OK です。
$ cpan Net::CIDR
で、one-liner で実行すると。
$ perl -MNet::CIDR -le 'print "$_\tREJECT" for (Net::CIDR::cidr2octets("192.168.0.1/28"))'
192.168.0.0 REJECT
192.168.0.1 REJECT
192.168.0.2 REJECT
192.168.0.3 REJECT
192.168.0.4 REJECT
192.168.0.5 REJECT
192.168.0.6 REJECT
192.168.0.7 REJECT
192.168.0.8 REJECT
192.168.0.9 REJECT
192.168.0.10 REJECT
192.168.0.11 REJECT
192.168.0.12 REJECT
192.168.0.13 REJECT
192.168.0.14 REJECT
192.168.0.15 REJECT
ちょっとした確認に便利ですねぇ。 あとは IP アドレスの範囲から CIDR を求める関数もあります。
$ perl -MNet::CIDR -le 'print join( qq{\n}, Net::CIDR::range2cidr("192.68.0.0-192.68.255.255", "10.0.0.0-10.3.255.255"))'
192.68.0.0/16
10.0.0.0/14
今ご紹介しました range2cidr や cidr2octets ほかにもいろいろあります。サンプルは perldoc Net::CIDR にて。
前回作成したモジュールは CPAN にアップロードします。今回は初めて ShipIt を使ってみたいと思います。
以下のように関連するモジュールのインストールです。cpan-upload-http は手動でインストール。
# cpan ShipIt
# cpan AppConfig::Std
# wget http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/cpan-upload-http-2.4.tar.gz
# tar xvfz cpan-upload-http-2.4.tar.gz
# cd cpan-upload-http-2.4
# perl Makefile.PL
# make
# make install
ShipIt するときに cpan-upload-http が利用する .pause ファイルの準備も。
# vi $HOME/.pause
# cat $HOME/.pause
user shigeta
password YOURPASSWORD
mailto shigeta@cpan.org
# chmod 600 $HOME/.pause
ShipIt を使う場合、.shipit ファイルがプロジェクトのトップに必要なのですが、Perl モジュールのひな形を作成してくれる pmsetup は .shipit を自動的に生成してくれます。miyagawa++
ShipIt に限らずですが、以下を実施して MANIFESTファイルと MANIFEST.SKIP ファイルの中を調整するのを忘れずに。
# perl Makefile.PL
# make manifest
いきなり shipit コマンドを叩くのが怖いなと思う人は dry-run オプションを使うのが吉ですね。
# shipit --dry-run
で、アップロード内容について色々確認した結果、Ship It!
# shipit
Upload to CPAN? [Y/n] Y
cpan-upload-http: your config file /var/root/.pause is readable by others!
Upload failed.
orz
.pause は 600 とかのパーミッションにしないとダメっぽい(上の手順に chmod を追加しました。)
そのあともう一度登録しようとしましたが、すでに登録済みだからコミットしないと。。。
確かに github のほうにはタグらしいコミットがついてる。
Next/release version? 0.01
No local changes, and version on disk is already tagged. Nothing to do.
orz
# git tag
0.01
あーすでにタグが 0.01 で打たれちゃっているからダメなんですね。よし、0.02 にします。
# shipit
Running step ShipIt::Step::FindVersion=HASH(0x18012d0)
Current version is: 0.01
Next/release version? 0.02
Edit file? [Y/n] Y
ここで ChangeLog の編集
(make dist 中につき中略)
Upload to CPAN? [Y/n] Y
#
今度はうまくいったっぽい。 PAUSEのShow my files したらアップロードされているではないか!すばらしい。簡単にコミットできた。便利ですねぇ。CPAN Author の方は ShipIt を使った方はいいですよ。
seealso:
モダンPerl入門 に載っていましたが、いつも忘れちゃうのでメモ。
Moose のおまじない
package Foo; use Moose; __PACKAGE__->meta->make_immutable; no Moose; 1; __END__
![]() |
モダンPerl入門 (CodeZine BOOKS) 牧 大輔 翔泳社 2009-02-10 by G-Tools |
Perl のフレームワークとして有名な Catalyst のオフィシャルサイトでは Advent Calendar と称して毎年12/1から12/24まで Catalyst の Tips が毎日公開されます。
Catalyst Advent Calendar (2007, 2006, 2005 もあります。)
そして、最近では perl-users.jp でも Perl 界隈で名前の通った方々がバトン形式で Perl の Tips を紹介されています。
すぐに試せる気の利いた Tips がありますので興味のある方はご参考にされてはいかがでしょうか?
YAPC::Asia 2008 に行ってきました で概要は書いたので、こちらではその他のことを書きます。
多くのご来場いただいた皆様、本当にありがとうございました。最後の竹迫さんのプレゼンを見ながら、そして宮川さんが「スタッフは立ってください」といったあとに皆さんから温かい大きな拍手をいただいたとき、涙がこぼれそうになったのは言うまでもありません。最高の体験ができました。
この体験をくれた YAPC::Asia 2008 に感謝、3日間の参加を許可してくれた会社に感謝、私が不在の間に仕事をこなしてくれた会社のみんなに感謝、心の底から本当に感謝しております。ありがとうございました。
また来年もスタッフとして参加できたらいいなと思いつつ、でも京都だったとしたら、会社はどこまで許可してくれるんだろうか、と気にしながら、また来年の YAPC::Asia につなげたいと思います。
今回の YAPC::Asia 2008 では WADL でごにょごにょできる XML::WADL というモジュールを披露しようと思っていたのですが、開発がまったく間に合っていなかったことと WebService::Simple などウェブサービス系が重なっていたようで、今回はプレゼンできませんでした。このモジュールはとりあえず完成させようと思うので、いずれ CPAN にあげるつもりです。hackathon では XML::WADL の実装を進めたいと思います。
そして今は弾さんのお宅にお邪魔して hackathon に参加しております。プレゼンをすることはできなかったのですが speakers のリストに入れていただいたので今回 hackathon に参加することができました。Larry Wall、Ingy、Jesse、clkao、gugod、jrockway、nothingmuch、lbrocardとかがいます。雰囲気的にはお客さん抜きの YAPC::Asia 2008 の DeNA room に近いです。基本的に英語です。この場を提供していただいた、弾さんとご家族のみなさま、本当にありがとうございます!
まだまだ書き足りないことがたくさんあるような気がしますが、感謝の気持ちでいっぱいであることをお伝えしました。
追伸:
懇親会で名刺をいただいた皆様に名刺をお返ししたいところなのですがタイミングがありません><
またどこかでどこかのイベントなどでお会いすることがあるかと思いますのでそのときにお返しさせてください。お声がけいただきましてありがとうございました。お話できてうれしかったです。
autobox は面白いですね。気持ちいい感じに近いかな。
perldoc autobox に書かれている 10->to(1); は以下のようになります。
$ perl -Mautobox -Mautobox::Core -MData::Dumper -le 'print Dumper 10->to(1)'
$VAR1 = [
10,
9,
8,
7,
6,
5,
4,
3,
2,
1
];
それから Perl6::Contexts も加えて、%hash をごにょごにょと。
$ perl -MPerl6::Contexts -Mautobox -Mautobox::Core -le 'my %hash = (foo => 'bar', baz => 'quux'); %hash->keys->sort->reverse->print;'
foo baz
もちろん keys を values に変えることだってできる。
$ perl -MPerl6::Contexts -Mautobox -Mautobox::Core -le 'my %hash = (foo => 'bar', baz => 'quux'); %hash->values->sort->reverse->print;'
quux bar
ハッシュのリファレンスなら Perl6::Contexts はいらないね。
$ perl -Mautobox -Mautobox::Core -le 'my $hash = {foo => 'bar', baz => 'quux'}; $hash->keys->sort->reverse->print;'
foo baz
ぼくはこの書き方好きだな。
参照
LiveJournal の Brad Fitzpatrick 作のリリース用ツール ShipIt をご紹介。
設定ファイルに書かれたShipIt::Step::xxxを順に実行してリリースの自動化をしてくれます。
実際使っていないのですが、ShipItのモジュール一覧を見るとどんなことをしてくれるのか大体分かりますね。
ShipItShipIt::ConfShipIt::ProjectTypeShipIt::ProjectType::AutoConfShipIt::ProjectType::Perl ShipIt::ProjectType::Perl::MakeMakerShipIt::ProjectType::Perl::ModuleBuildShipIt::StateShipIt::StepShipIt::Step::ChangeVersionShipIt::Step::CheckChangeLogShipIt::Step::CommitShipIt::Step::DistTest ShipIt::Step::FindVersion ShipIt::Step::MakeDist ShipIt::Step::Tag ShipIt::Step::UploadCPAN ShipIt::Util ShipIt::VCShipIt::VC::SVN
彼の紹介はこちらのエントリにあります。YAPC::Asia 2007 Tokyo で Pluggable なソフトの作り方をプレゼンされた miyagawa さんからのアドバイスがコメントにあったりしてこれからが楽しみなツールになりそうな予感ですね。