Perl

28 September 2010

IP address modules benchmark

I posted introduction of NetAddr::IP before, then I tried to compare NetAddr::IP with Net::IP. The benchmark is here. And this post is testing embedded gist :)

13 August 2010

NetAddr::IP for IPv6

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 のアドレスの確認用途としては足りる気もします。

02 December 2009

Advent Calendar


Abigael's Advent Calendar Day 0
Originally uploaded by Potjie

In Perl world, some famous advent calendars:

These site will be updated from December 1st to December 25th. Don't miss it!

17 March 2009

CIDR の IP アドレスを列挙する

のを探していたら、ここのページにズバリありました。

・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 にて。

10 March 2009

ShipIt にチャレンジの巻

前回作成したモジュールは 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:

27 February 2009

メモ: Moose

モダンPerl入門 に載っていましたが、いつも忘れちゃうのでメモ。

Moose のおまじない

package Foo;
use Moose;

__PACKAGE__->meta->make_immutable;

no Moose;

1;
__END__
4798119172 モダンPerl入門 (CodeZine BOOKS)
牧 大輔
翔泳社  2009-02-10

by G-Tools

16 December 2008

Advent Calendars

Perl のフレームワークとして有名な Catalyst のオフィシャルサイトでは Advent Calendar と称して毎年12/1から12/24まで Catalyst の Tips が毎日公開されます。

Catalyst Advent Calendar  (2007, 2006, 2005 もあります。)

そして、最近では perl-users.jp でも Perl 界隈で名前の通った方々がバトン形式で Perl の Tips を紹介されています。

JPerl Advent Calendar 2008

すぐに試せる気の利いた Tips がありますので興味のある方はご参考にされてはいかがでしょうか?

16 May 2008

ありがとう! YAPC::Asia 2008

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 に近いです。基本的に英語です。この場を提供していただいた、弾さんとご家族のみなさま、本当にありがとうございます!

まだまだ書き足りないことがたくさんあるような気がしますが、感謝の気持ちでいっぱいであることをお伝えしました。

追伸:
懇親会で名刺をいただいた皆様に名刺をお返ししたいところなのですがタイミングがありません><
またどこかでどこかのイベントなどでお会いすることがあるかと思いますのでそのときにお返しさせてください。お声がけいただきましてありがとうございました。お話できてうれしかったです。

23 January 2008

autobox面白い

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

ぼくはこの書き方好きだな。

参照

16 April 2007

ShipIt

LiveJournalBrad 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 TokyoPluggable なソフトの作り方をプレゼンされた miyagawa さんからのアドバイスがコメントにあったりしてこれからが楽しみなツールになりそうな予感ですね。

Access Ranking

Powered by Six Apart
Sponsored links