- XML-RPCを使ってTracのチケットに添付ファイルを投げ込む(Perl編)
- メールアドレスに一致する正規表現
# $mailre = '^[\x01-\x7F]+@(([-a-z0-9]+\.)*[a-z]+|\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])';
という正規表現を提案します。正確なアドレスを弾かずに、「なるべく」おかしなアドレスを弾く正規表現です。
- see also メールアドレスの正規表現
- Programming note
- Data::DumperでUTF-8フラグつき文字列をエスケープさせないようにするには « ku
まず、デフォトルだと Data::Dumper はXSを呼び出していて、そのままだとコード的に割り込む余地がないのでUseperlにする。で、qquote()をカラにしたらできあがり。qquote()の中身をまるまる捨ててるのであとで困るのかもしれないけど困った時になんとかすればいい話。
use Data::Dumper; { package Data::Dumper; sub qquote { return shift; } } $Data::Dumper::Useperl = 1;
perlbrew
- perlbrew + cpanminus でつくる Perl 環境が最強すぎる - ぽっぺん日記@karashi.org(2010-05-16)
- perlbrew + cpanminus + local::lib で環境構築 - Webtech Walker
- Gamburtsev: python ruby perl で複数のバージョンを使い分ける
- perlbrewとcpanmのインストール - MacOS Xでの環境構築 - D-ramu blog
- OS X LionにperlbrewとcpanmをインストールしてPerl環境を整える | ましましブログ
mbp:~ namai$ export PERLBREW_ROOT=$HOME/.perlbrew mbp:~ namai$ curl -L http://xrl.us/perlbrewinstall | bash mbp:~ namai$ echo 'source ~/.perlbrew/etc/bashrc' >> ~/.bashrc mbp:~ namai$ source ~/.bashrc mbp:~ namai$ perlbrew init
- .perlbrewに入れる場合は.bashrcにはexportも必要
#perlbrew export PERLBREW_ROOT=$HOME/.perlbrew source ~/.perlbrew/etc/bashrc
- .perlbrewに入れる場合は.bashrcにはexportも必要
CPAN
- cpan:Sub::Signatures
- Use proper signatures for subroutines, including dispatching.
- 新しいPerlに今まで使ってたモジュールをまとめてインストールする - 酒日記 はてな支店
- What tools should you use to create a CPAN distribution? | dagolden
cpanminus
misc
- 404 Blog Not Found:perl - ワンライナーの書き方入門
- -MO=Deparseでスクリプト化
- cpan:B::Deparse - Perl compiler backend to produce perl code
- JPerl Advent Calendar 2010
今年も JPerl Advent Calendar の季節がやってきました。 Perl に関連する tips を25本おとどけしちゃいます。 12月1日から毎日一本ずつ tips をアップしていっちゃうという企画です。 くわしくはこのあたりをみてください。
- ファイルハンドルをめぐる冒険(ただしマニア向け) - daily dayflower
- ファイルハンドルをネタに、IO:Handleから型グロブまで説明。特に型グロブの図示が分かりやすい。
- https://twitter.com/__gfx__/status/16308724930973696
Perlはデフォでどんなシグナルもトラップしないらしい。つまり、SIGINT発行するとENDとかDESTROYは呼ばれない。RubyはSIGINTをトラップするので、デフォルトでENDは呼ばれる。
- https://twitter.com/__gfx__/status/16314985630146560
PerlでDESTROYが誤って二回呼ばれてしまうコード例(by kazuho) gist:747040
- cpan:Image::ExifTool
- see exiftool for example
- オレBlog » Exif Orientationタグによる補正方法
- M.C.P.C.: AIファイルからPerlでサムネールを取り出す
もっとも、Image::ExifTool入れちゃえば、コマンドラインツールが入るので
$ exiftool -b -ThumbnailImage test.ai > thumbnail.jpg
でできちゃうわけですけれども!
- cpan:Web::Scraper
- install on Ubuntu 10.04
- sudo aptitude install -R libhtml-treebuilder-xpath-perl libxml-xpathengine-perl libhtml-selector-xpath-perl libuniversal-require-perl libyaml-perl
- sudo cpan HTML::TreeBuilder::LibXML
- sudo cpan Web::Scraper
- htmltree => cpan:HTML::TreeBuilder
#!/usr/bin/perl # Time-stamp: "2000-10-02 14:48:15 MDT" # # Parse the given HTML file(s) and dump the parse tree # Usage: # htmltree -D3 -w file1 file2 file3 # -D[number] sets HTML::TreeBuilder::Debug to that figure. # -w turns on $tree->warn(1) for the new tree (snip)
- CPAN:Perl::Critic
Critique Perl source code for best-practices.
- CPAN:Parallel::ForkManager
SYNOPSIS
use Parallel::ForkManager; $pm = new Parallel::ForkManager($MAX_PROCESSES); foreach $data (@all_data) { # Forks and returns the pid for the child: my $pid = $pm->start and next; ... do some work with $data in the child process ... $pm->finish; # Terminates the child process }
- CPAN:Convert::Bencode
No error detection of bencoded data. Damaged input will most likely cause very bad things to happen, up to and including causeing the bdecode function to recurse infintly.
- oh...
- cpan:Class::Accessor::Fast
- newする際に初期値を与えないと、getterはundefを返す
- Foo.pm
package Foo; use base qw(Class::Accessor::Fast); __PACKAGE__->mk_accessors( qw(bar bazz) ); 1;
- main.pl
use Foo; use feature say; my $foo = Foo->new( {bar => 1} ); if (defined $foo->bar) { say $foo->bar; } if (! defined $foo->bazz) { say "undef"; } $foo->hoge;
- $ ./main.pl
1 undef Can't locate object method "hoge" via package "Foo" at main.pl line 7.
- 放り込んだハッシュリファレンスは元の構造のままアクセスできる
- main.pl
use Foo; use feature say; my $foo = Foo->new( {hoge => 1, fuga => 2, piyo => { moge => [ a => b => c => 1 ] }} ); if (defined $foo->bar) { say $foo->bar; } use Data::Dumper; say Dumper $foo;
- $ ./main.pl
$VAR1 = bless( { 'piyo' => { 'moge' => [ 'a', 'b', 'c', 1 ] }, 'fuga' => 2, 'hoge' => 1 }, 'Foo' );
- main.pl
- Class::Accessor::Fast - アクセサの作成 / Perlモジュール徹底解説 - サンプルコードによるPerl入門
- newのオーバーライドは$class->SUPER::new()で可能。