タグ

perlに関するwalf443のブックマーク (123)

  • XS基礎文法最速マスター - Islands in the byte stream (legacy)

    元ネタ:Perl基礎文法最速マスター(id:perlcodesample) XSを始めるための手順といくつかの要素の解説です。C言語をある程度知っている人でも,これを読んだだけでXSの基礎をマスターしてXSを書くことができるようにはなっていません。リファレンスでもありません。 XSとは,狭義ではPerlでエクステンションを書くためのマクロ言語の名前ですが,広義ではエクステンションを書くための技術の総称です。ここでは,広義のXSを俯瞰します。 XSはいろいろと特殊なのでテンプレは無視で行きます。 目次: h2xsで空のディストリビューションを作る XSファイルの構成 スレッドコンテキスト SVファミリ GCとスコープ さらなる学習のために h2xsで空のディストリビューションを作る 以下のコマンドで空のXSディストリビューションを作ることができます。 h2xs -A -b 5.8.1 -n

    XS基礎文法最速マスター - Islands in the byte stream (legacy)
  • What's your clone policy? - Data::Clone - Islands in the byte stream (legacy)

    複雑なデータ構造のコピーにはStorable::dclone()やClone::clone()がよく使われてきた。しかし,これらのクローンポリシーには疑問がある。そこで,新しいクローンモジュールを書いてみた。 Data::Clone - search.cpan.org Data::Clone - github.org さて,まずStorableのポリシーはおおむね以下の通り: リファレンスはすべて深いコピー(deep copy) スカラー値に対しては,Perlレベルでの代入に等しい操作を行い,マジックは無視する オブジェクトに対しては,フックが定義されていればそれを使い,未定義であればその他のリファレンスと同じように扱う 次に,Cloneのポリシーはおおむね以下の通り: リファレンスはすべて深いコピー スカラー値に対しては,マジックも含めて可能な限りコピーする オブジェクトもその他のリファ

    What's your clone policy? - Data::Clone - Islands in the byte stream (legacy)
    walf443
    walf443 2010/01/13
  • 複数ファイルを使った中規模 XS の開発 - daily dayflower

    複数ファイルをビルド対象とした XS の開発について,あまり手間をかけないシンプルで効果的な方法を書いていきます。自分の経験をもとに書きますのでベストプラクティスではありませんが。 余談(SV*() マクロの sideeffect にやられた話) state_stack という配列に state を整数値でスタックとして格納していて,スタックから過去の state を取り出そうとしたんです。 んで(わりと素直に) state = SvIV(av_pop(state_stack)); と書いたら,2つずつスタックから pop されてしまいました*1。 XS hacker なら当たり前な話ですけど,SV*() というのは一見関数然としてますがマクロなんです。 #define SvIV(sv) (SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv)) こんな形で,いずれのケースに

    複数ファイルを使った中規模 XS の開発 - daily dayflower
  • mod_perlで親プロセスとのCopy on Writeな共有メモリを増やす方法。 - hideden.hatenablog.com

    大量にアクセスがあってMaxClientを大きく設定したい場合、Apacheの1プロセスあたりのメモリを少なくするのが重要。当然アプリ側で大きなライブラリを読み込まずに画像の変換はGearmandにタスクとして投げたりとかの工夫するのも有効だが、fork元になるApacheの親プロセスと子プロセス間でできる限りCopy on Writeな共有メモリを増やすのも有効。 その辺の詳しい仕組み等の話はnaoyaさんがd:id:naoya:20080212:1202830671でしてるのでそこを参考に。linuxカーネルまわりの仕組みって楽しいよね。会社の案件ではFreeBSDサーバーも結構あるんだけどFreeBSDではどうなるのかは知らない。 で、社内にXenなテストサーバーがあるのでまっさらな環境で色々実験してみた。・・・過程を全部書こうとしたら長くなったので省略。地味にpsしたり/proc/

    mod_perlで親プロセスとのCopy on Writeな共有メモリを増やす方法。 - hideden.hatenablog.com
  • モジュールをuseした際のメモリ使用量(増加量)を調べてみる (iandeth.)

    iandeth. Perl, Flash ActionScript, MySQL, Movable Type, システム開発 - そんなテーマのサイトdeth. gtop.plx #!/usr/bin/perl use strict; use warnings; use GTop; my $gtop = GTop->new; my $before = $gtop->proc_mem($$)->size; eval $ARGV[0]; die $@ if $@; my $after = $gtop->proc_mem($$)->size; my $diff = GTop::size_string($after - $before); print "$diff : $ARGV[0]\n"; 例) CGIモジュールのメモリ増加量は... $ ./gtop.plx 'use CGI' 704k :

  • vim 用 Template-Toolkit のシンタックスハイライト - daily dayflower

    ひさびさに Template Toolkit を触ってて,普通に html のシンタックスハイライトで書いていたんですが,< とか > とかの演算子がでてくると,ハイライトがおかしくなるのが煩わしい! と思ってたら,TT2 用の文法ファイルを書いてくださった方がいらっしゃるんですね。 ということで,以下の先人の知恵をほぼそのままお借りしました。 TT2 syntax - Syntax Highlight for Template-Toolkit 2.x : vim online Template-Toolkit のテンプレートファイルを vim で色付きにする - Craftworks Tech Blog - Branch およびコメント欄 シンタックスファイルのインストール 以下は「個人ユーザ」用のインストール方法です。システムワイドな場合の方法はホームディレクトリのかわりに $VIMR

    vim 用 Template-Toolkit のシンタックスハイライト - daily dayflower
  • Pod::PerldocJp - Charsbar::Note

    Perlのドキュメントはわざわざサーバにアクセスして読むものではなく、インストールして読むものですよね?――というわけで、日人向けに特化したperldocをつくってみました。Pod::PerldocJpをインストールすると、perldocjpというコマンドが利用できるようになります。これを使うと、 =encodingが指定されている(たいていは日語の)PODも(端末の文字コードによらず)正しく表示できるようになります。 perlコアに付属している一部のドキュメントについてはperldoc.jpで公開されている日語のPODをダウンロードしてきてローカルで読めるようになります。 fによるコマンド検索などにも対応していますので、コマンドラインから $ perldocjp -Jf printとタイプすれば、日語でprintコマンドの説明が読めるようになります(perlfuncを訳してくださ

    Pod::PerldocJp - Charsbar::Note
    walf443
    walf443 2009/11/27
    perlユーザーであればperldocはよくつかうので、名前がjperldocとかの方がヒストリーバックしやすかったりとかコマンド修正してperldocしなおしたりしやすくて素敵じゃないかとおもったりします。まぁaliasすればいいんですが
  • #perl and more - $_ とスコープ : 404 Blog Not Found

    2009年11月01日22:30 カテゴリLightweight Languages #perl and more - $_ とスコープ 良記事は補足して育てよう。 現代的なPerlの記述方法一覧 + α - Perl入門〜サンプルコードによるPerl入門〜 補足するのは、$_の使いどころについて。 実はこうすることで、$_の使用は暗示的なものも含めてすべてトラップすることが出来る。 use strict; use warnings; { package _; use Carp; sub TIESCALAR { bless {}, shift } sub FETCH { croak q(Don't you dare get $_) } sub STORE { croak q(Don't you dare set $_) } } tie $_, "_"; $_ = 1; 明示的なものだけでは

    #perl and more - $_ とスコープ : 404 Blog Not Found
    walf443
    walf443 2009/11/24
    tie変数なのでpackage _で上書きすればtrapできるってことっぽい?
  • To repeat testing with different configuration - Islands in the byte stream (legacy)

    構成条件を変えてテストを繰り返したいことがある。 たとえば,XSとPurePerlの両方の実装を持つモジュールなどはそうだし,Any::Mooseを使ったモジュールであれば $ENV{ANY_MOOSE} を変えてテストを繰り返したいと考えるのは当然だ。 この問題は,postamble()*1でMakefileにターゲットを追加することで解決できる。 さて,ここでは,開発者モードのときに $ENV{FOO_PUREPERL}=1 でテストをもう一度繰り返したいものとする。これには,Makefile.PLに以下のように記述すればよい。 # Makefile.PL use inc::Module::Install; # ... if(author_context){ # repeat testing # see also ExtUtils::MM_Any::test_via_harness()

    To repeat testing with different configuration - Islands in the byte stream (legacy)
    walf443
    walf443 2009/10/27
    テスト実行するときに環境変数セットしたりするやり方がちょうど知りたかったのでした。同じやり方で、単体、結合テストを分けたりとかもできますね。
  • Test::mysqldとかでテスト走らせる時に際行ったいろんな事。 - D-6 [相変わらず根無し]

    Test::mysqldとかでテスト走らせる時に際行ったいろんな事。 Test::mysqldを使うとクールにMySQLを起動させられるので、それを使おうとしたんだ。でもおいらのローカルにあるmysqlMacPortsのmysqlで、ファイルレイアウトがメタメタなんだ。だからまずこんな感じで、Test::mysqldを継承するMyApp::Test::mysqldを書いたわけさ! 必要とあればMacPortsとかの環境じゃなくてもMYSQL_INSTALL_DBMYSQLDを設定すればテスト時にTest::mysqldが見るバイナリを変更できるのがミソだね! さて、これを使っても、何個もテストスクリプトがある時に一回一回mysqlを立ち上げ直してちゃ意味がない。遅いし、毎回DBの設定をしなくちゃいけないじゃないか! だもんで、まずmake testが走るときに前もってTest::mys

  • #perl #regexp - $utf8 =~ /.../i # の傾向と対策 : 404 Blog Not Found

    2009年10月01日18:00 カテゴリLightweight Languages書評/画評/品評 #perl #regexp - $utf8 =~ /.../i # の傾向と対策 というわけで、その傾向と対策を。 [Perl]UTF8-flagged strings affects regexps with the "i" modifier - use GFx::WebLog; Perlではutf8フラグ付きの文字列に対するuc/lc/"i"正規表現修飾子は非常に遅いのだが,H::F::Liteでは/iを使っているので,試しに/iを使わないようにしてみると,速度が改善した id:gfxの主張は、以下のようにして確かに確かめられる。 use strict; use warnings; use Benchmark qw/cmpthese timethese/; { use bytes; m

    #perl #regexp - $utf8 =~ /.../i # の傾向と対策 : 404 Blog Not Found
    walf443
    walf443 2009/10/05
  • hide-k.net#blog: DBIx::Class::ResultManagerのdeprecatedに備える

    DBIx::Class::ResultSetManager - scheduled for deletion in 09000 - search.cpan.org DBIx::Class::ResultSetManager never left experimental status and has now been DEPRECATED. This module will be deleted in 09000 so please migrate any and all code using it to explicit resultset classes using either __PACKAGE__->resultset_class(...) calls or by switching from using DBIx::Class::Schema->load_classes()

  • #perl - utf8::decode()ではなくEncode::decode_utf8()を使うべき理由 : 404 Blog Not Found

    2009年09月13日13:00 カテゴリLightweight Languages #perl - utf8::decode()ではなくEncode::decode_utf8()を使うべき理由 駄目です。 [を] Perl の utf8 まわりのおまじない 最近良く使うおまじない、というかイディオム。 utf8::decode($text) unless utf8::is_utf8($text); こういう場合は、Encode::decode_utf8()でないと。 以下をごらんください。 #!/usr/bin/perl use strict; use warnings; use Encode; use Devel::Peek; for my $bytes ( "\x2F", "\xC0\xAF", "\xE0\x80\xAF", "\xF0\x80\x80\xAF" ) { my $u

    #perl - utf8::decode()ではなくEncode::decode_utf8()を使うべき理由 : 404 Blog Not Found
    walf443
    walf443 2009/09/22
    utf8::decodeの使いどころについて
  • utf8::SWASHGETが重い - グニャラくんのグニャグニャ備忘録@はてな

    なんか動かしてるプログラムのとある関数がやたら重い。 DProfセンセ〜イ!! %Time ExclSec CumulS #Calls sec/call Csec/c Name 59.3 36.62 38.237 1 36.621 38.236 Omokute::Tamaran::Function 19.6 12.10 15.161 15223 0.0008 0.0010 utf8::SWASHGET ぎゃあ。激重いがな!utf8::SWASHGET。 で、正規表現を使う際に内部的に呼ばれているらしいけど、 ちょっと重すぎ。 http://www.nntp.perl.org/group/perl.unicode/2807 によると、 Unicode含まない正規表現使うときは、 そこだけスコープ切って、その中でuse bytesを指定してあげな! だそうです。 めんどい。 しかも日語での情

    utf8::SWASHGETが重い - グニャラくんのグニャグニャ備忘録@はてな
    walf443
    walf443 2009/09/02
    use utf8するだけで凄い遅くなるっていうのはこれが原因か。
  • YappoLogs: bradとmyとuse fieldsとPseudo-hashesとHash::Utilと

    bradとmyとuse fieldsとPseudo-hashesとHash::Utilと bradプロダクトではuse fieldsが多用されています。そして、 my ClassName $var;のような変数宣言が多用されています。 perldoc -f myしてみるとuse fieldsで使うみたいな事が書いてありました。 use fieldsってのは package Jitensya; use strict; use warnings; use fields qw/(sound); sub new { my $proto = shift; my $self = ref $proto ? $proto : fields::new($proto); $self; } 1; のようなコードがあるとして use strict; use warnings; use Jitensya; my $

    walf443
    walf443 2009/08/27
  • perl - ネコ演算子と<*glob*>とFile::Glob::Slurp : 404 Blog Not Found

    2009年06月10日07:30 カテゴリLightweight Languages perl - ネコ演算子と<*glob*>とFile::Glob::Slurp それって<*glob*>「メタ演算子」で。 Perl5 でネコ演算子Range Check - id:kazuhookuのメモ置き場 Perl 5 で、ある値が範囲内に入ってるか確認したいことってあるわけで。たとえば、 my $t = time; if ($min <= $t && $t < $max) { ... } みたいな冗長なコードは書きたくない。 こんな感じで。 #!/usr/bin/perl use strict; use warnings; { no warnings 'redefine'; *CORE::GLOBAL::glob = sub{ my $expr = shift; warn $expr; $exp

    perl - ネコ演算子と<*glob*>とFile::Glob::Slurp : 404 Blog Not Found
    walf443
    walf443 2009/06/10
  • Test::LatestPrereqs 0.01 - Charsbar::Note

    管理しているモジュール/アプリケーションが増えてくると、なにかの理由(バグを見つけたとか新しい機能が追加されたとか)で依存モジュールのバージョンをあげようと思ったとき、「ほかにこのモジュールに依存しているものはなかったっけ?」と首をかしげることが増えてきます。そんなときのために簡単なテストを用意するのがこのモジュール。 インストールするとtest_prereqs_versionという非常にタイプしづらいコマンドがついてくるので、Makefile.PL/Build.PLがあるところで実行してやると、こんな感じでPREREQ_PMやらrequiresやらの情報をまるっと解析してバージョンチェックしてくれます。 C:\github\test-latestprereqs> test_prereqs_version 1..6 ok 1 - Test::More 0.47 is ok ok 2 - F

    Test::LatestPrereqs 0.01 - Charsbar::Note
    walf443
    walf443 2009/05/26
    debパッケージとかつくったりするときに使えそう
  • Yet another alias module: Scalar::Alias - Islands in the byte stream (legacy)

    Lexical::Typesを見て型つきレキシカル宣言の威力を知り,試してみたくなったので一つモジュールを書いてみた。 Scalar::Alias - search.cpan.org この型つきレキシカル宣言はうまく使うといろいろ面白いことができそうだ。しかもオーバーヘッドがコンパイル時のみというのがうれしい。 #!perl -w use strict; use Scalar::Alias; sub inc{ my alias $x = shift; $x++; return; } my $i = 0; inc($i); print $i, "\n"; # => 1 __END__ エイリアスを実現するモジュールは既に数多くあるが,このモジュールは高速であることが特徴となっている。これは,PL_peeppハックによってコンパイル済みの構文木を直接変更しており*1,レキシカル変数の参照と代入

    Yet another alias module: Scalar::Alias - Islands in the byte stream (legacy)
    walf443
    walf443 2009/05/26
  • resultset_attributes を利用して、テーブルの alias を me から変更する with DBIC - (゚∀゚)o彡 sasata299's blog

    2009年05月19日02:17 Perl resultset_attributes を利用して、テーブルの alias を me から変更する with DBIC こんばんわ。ささたつです。ヾ(o゚ω゚o)ノ゙ 今日はDBICの話です。最近perlのO/RマッパーであるDBICを使っています。簡単なSQLだととても便利なんですが、複雑なSQLになると。。。すぐにスカラーリファレンスに頼ってしまいます(よね?><) さて、テーブルには delete_flag を必ず置くように設計していて、findとかsearchしたときに delete_flag = 0 をデフォルトの検索条件として利用するため、Schemaファイルにこのような設定を書いていました。 __PACKAGE__->resultset_attributes({ where => {delete_flag => 0} }); ただ

  • Perl, Python間のやり取り - Doge log

    やはりpyperlと同じになってきた。。。。 python,perlをいろいろ触ってて少しずつ見えてきたのでメモ程度に書いておく。 Perl->Pythonの変換 基的な型変換はこんな感じ。 SV->PyObjectへ if(SvPOK(sv)){ //string STRLEN len; char *s = SvPV(sv, len); o = Py_BuildValue("s#", s, len); }else if(SvNOK(sv)){ //double o = Py_BuildValue("d", SvNV(sv)); }else if(SvIOK(sv)){ //long o = Py_BuildValue("l", SvIV(sv)); }else if(SvROK(sv)){ // ref o = newSvRV_Object(self, sv); }else{ //ot

    Perl, Python間のやり取り - Doge log