[[PageOutline]] [[TitleIndex(Dev/Perl,format=group)]] * [http://blog.cles.jp/item/3065 XML-RPCを使ってTracのチケットに添付ファイルを投げ込む(Perl編)] * [http://www.tt.rim.or.jp/~canada/comp/cgi/tech/mailaddrmatch/ メールアドレスに一致する正規表現] > {{{ > # $mailre = '^[\x01-\x7F]+@(([-a-z0-9]+\.)*[a-z]+|\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])'; > }}} > という正規表現を提案します。正確なアドレスを弾かずに、「なるべく」おかしなアドレスを弾く正規表現です。 * see also [http://www.din.or.jp/~ohzaki/mail_regex.htm メールアドレスの正規表現] * [http://www.rwds.net/kuroita/program/ Programming note] * [http://ido.nu/kuma/2006/09/12/avoiding-data-dumper-dumps-utf8-flagged-values-in-escaped-strings/ Data::DumperでUTF-8フラグつき文字列をエスケープさせないようにするには « ku] > まず、デフォトルだと Data::Dumper はXSを呼び出していて、そのままだとコード的に割り込む余地がないのでUseperlにする。で、qquote()をカラにしたらできあがり。qquote()の中身をまるまる捨ててるのであとで困るのかもしれないけど困った時になんとかすればいい話。 > {{{#!perl > use Data::Dumper; > { > package Data::Dumper; > sub qquote { return shift; } > } > $Data::Dumper::Useperl = 1; > }}} = perlbrew = * [http://d.karashi.org/20100516.html#p02 perlbrew + cpanminus でつくる Perl 環境が最強すぎる - ぽっぺん日記@karashi.org(2010-05-16)] * [http://webtech-walker.com/archive/2010/04/22173415.html perlbrew + cpanminus + local::lib で環境構築 - Webtech Walker] * [http://zunermuka.blogspot.com/2010/04/python-ruby-perl.html Gamburtsev: python ruby perl で複数のバージョンを使い分ける] * [http://d.hatena.ne.jp/ramtiga/20110710/p1 perlbrewとcpanmのインストール - MacOS Xでの環境構築 - D-ramu blog] * [http://blog.kiftwi.net/2011/08/02/os-x-lion%E3%81%ABperlbrew%E3%81%A8cpanm%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6perl%E7%92%B0%E5%A2%83%E3%82%92%E6%95%B4%E3%81%88%E3%82%8B/ 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 }}} = CPAN = * cpan:Sub::Signatures * Use proper signatures for subroutines, including dispatching. * [http://d.hatena.ne.jp/sfujiwara/20100517/1274081705 新しいPerlに今まで使ってたモジュールをまとめてインストールする - 酒日記 はてな支店] * [http://www.dagolden.com/index.php/1173/what-tools-should-you-use-to-create-a-cpan-distribution/ What tools should you use to create a CPAN distribution? | dagolden] = cpanminus = * [http://blog.nobjas.net/2010/03/perl-cpanminus-%E3%81%A8-cpan-outdated-%E3%81%A7%E3%83%8F%E3%83%83%E3%83%94%E3%83%BCcpan%E3%83%A9%E3%82%A4%E3%83%95/ (perl) cpanminus と cpan-outdated でハッピーCPANライフ] * [http://artifactsauce.blogspot.jp/2010/10/cpanmmac-os-x.html ArtifactSauce: cpanmをMac OS Xにインストールする] = misc = * [http://blog.livedoor.jp/dankogai/archives/51026593.html 404 Blog Not Found:perl - ワンライナーの書き方入門] * -MO=Deparseでスクリプト化 * cpan:B::Deparse - Perl compiler backend to produce perl code * [http://perl-users.jp/articles/advent-calendar/2010/ JPerl Advent Calendar 2010] > 今年も JPerl Advent Calendar の季節がやってきました。 > Perl に関連する tips を25本おとどけしちゃいます。 > 12月1日から毎日一本ずつ tips をアップしていっちゃうという企画です。 > くわしくは[http://d.hatena.ne.jp/tokuhirom/20081216/1229387324 このあたり]をみてください。 * [http://togetter.com/li/77225 Togetter - 「Shibuya Perl Mongersテクニカルトーク#15」] * twitter:takesako/status/12917008421101568 * source:lab/trunk/Commentary/shibuya.pm * [http://shibuya.pm.org/blosxom/techtalks/201012.html Shibuya Perl Mongers : Shibuya Perl Mongersテクニカルトーク#15] * [http://live.streamingmedia.jp/shibuyapm15/ Shibuya Perl Mongersテクニカルトーク#15 @ IIJ] * [http://www.slideshare.net/spiritloose/write-good-parser-in-perl Write good parser in perl] * [http://d.hatena.ne.jp/dayflower/20080605/1212652674 ファイルハンドルをめぐる冒険(ただしマニア向け) - 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 * [http://www2.sakakazu.jp/blog/index.php?itemid=240 オレBlog » Exif Orientationタグによる補正方法] * [http://blog.dtpwiki.jp/dtp/2009/05/aiperl-7144.html M.C.P.C.: AIファイルからPerlでサムネールを取り出す] > もっとも、Image::ExifTool入れちゃえば、コマンドラインツールが入るので {{{ $ exiftool -b -ThumbnailImage test.ai > thumbnail.jpg }}} > でできちゃうわけですけれども! * [http://yusukebe.com/tech/archives/20070803/124356.html Perlでニコニコ動画のflvとコメントxmlをダウンロードする (Yusukebe::Tech)] * cpan:Web::Scraper * [http://www.slideshare.net/miyagawa/web-scraper-shibuyapm-tech-talk-8 Web Scraper Shibuya.pm tech talk #8] * [http://e8y.net/mag/013-web-scraper/ use Web::Scraper; - 今日のCPANモジュール] * [http://blog.livedoor.jp/kjugk/archives/808785.html 駱駝の背中に乗って行こう : Perlでスクレイピング(Web::Scraperモジュール)] * Web::Scraperの平易な導入 * [http://d.hatena.ne.jp/hetappi/20070830/1188491543 scraper CLI で遊ぶ - へたっぴ日記] * scraper コマンドの使い方 * 非常に有用 * [http://d.hatena.ne.jp/murishinai/20120913/p1 Web::Scraperを使ってニコニコ大百科の掲示板投稿内容をスクレイピングしていました - Guinea Pig] * 実用例 * [http://yoshiiz.blog129.fc2.com/blog-entry-382.html よしいずの雑記帳  Web::Scraperを使ったPerlプログラムの例] * install on Ubuntu 10.04 1. sudo aptitude install -R libhtml-treebuilder-xpath-perl libxml-xpathengine-perl libhtml-selector-xpath-perl libuniversal-require-perl libyaml-perl 1. sudo cpan HTML::TreeBuilder::LibXML 1. sudo cpan Web::Scraper * cpan:threads * [http://www.perlmonks.org/?node_id=615459 perl multithreading] * [http://www.devx.com/webdev/Article/21909 Create a LAMP Search Engine Using Multithreaded Perl] * [http://oreilly.com/pub/h/943 Adding Progress Bars to Your Scripts] * htmltree => cpan:HTML::TreeBuilder {{{#!perl #!/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. * [http://www.perlmonks.org/?node_id=718414 maximum value of a scalar] * [http://perldoc.jp/docs/perl/5.10.0/perlnumber.pod perlnumber - Perl での数値と数値操作の意味論 【perldoc.jp】] * CPAN:Parallel::ForkManager > === SYNOPSIS === > {{{#!perl > 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を返す 1. Foo.pm {{{#!perl package Foo; use base qw(Class::Accessor::Fast); __PACKAGE__->mk_accessors( qw(bar bazz) ); 1; }}} 1. main.pl {{{#!perl 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; }}} 1. $ ./main.pl {{{ 1 undef Can't locate object method "hoge" via package "Foo" at main.pl line 7. }}} * 放り込んだハッシュリファレンスは元の構造のままアクセスできる 1. main.pl {{{#!perl 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; }}} 1. $ ./main.pl {{{ $VAR1 = bless( { 'piyo' => { 'moge' => [ 'a', 'b', 'c', 1 ] }, 'fuga' => 2, 'hoge' => 1 }, 'Foo' ); }}} * [http://d.hatena.ne.jp/perlcodesample/20100223/1264257759 Class::Accessor::Fast - アクセサの作成 / Perlモジュール徹底解説 - サンプルコードによるPerl入門] * newのオーバーライドは$class->SUPER::new()で可能。