この記事は abicky.net の 初めて Perl でコードを書く時に知っておきたかったこと に移行しました
YAPC::Asia 2010 で LT をさせていただきました。 5 分枠で 100 枚のスライドになったので、かなり早口になりました。 銅鑼は鳴りませんでしたが、きっと 4:58 ぐらいギリギリにおさまったとおもいます。 トーク自体は日本語で行ないましたが、英語圏の方も結構いらっしゃるので、全セリフを決めておき、LT に英語字幕をつける試みをしてみました。 ただシャッフルするだけなのに、やりかたがこれほどまでに出てくるということに、TIMTOWTDI な Perl の特性がよくあらわれているとおもいます。 スライドは slidshare にアップしたものをご覧ください。 毎週毎週一緒に楽しく頭をかかえながらシャッフルをひねり出した弊社の同僚、元同僚の皆様に感謝します。 今年も YAPC::Asia 楽しかったー!
stableなquicksortないかなと思っていろいろ探していたらPerlのquicksortがstableな実装だった. perl5.10.0のpp_sort.cより引用. Perlのquicksortについては以下のようなデータ構造を利用している. indir list1 +----+ +----+ | | --------------> | | ------> first element to be sorted +----+ +----+ | | --------------> | | ------> second element to be sorted +----+ +----+ | | --------------> | | ------> third element to be sorted +----+ +----+ ... +----+ +----+ | | ----
圧縮全文索引の実装などでしばしば利用される Rank/Select 辞書と呼ばれるデータ構造があります。詳しくは参考文献を参照していただくとして、今回は一般の文字列に対して効率的に Rank/Select を可能とするデータ構造である Wavelet Tree (ウェーブレット木) のライブラリを作りました。 http://github.com/naoya/perl-algorithm-wavelettree/tree/master my $wt = Algorithm::WaveletTree->new("abccbbabca"); is $wt->rank(6, 'a'), 2; is $wt->rank(6, 'b'), 3; is $wt->rank(9, 'b'), 4; is $wt->select(0, 'a'), 0; is $wt->select(1, 'a'), 6;
2006年11月26日02:45 カテゴリLightweight Languages perl, python & ruby - ord() vs. Unicode というわけで、ord篇はこちら。 404 Blog Not Found:perl, python & ruby - chr() vs. Unicode とりあえずchrが長くなったのでordは別entryということで。 文字から数値へ(ord) まずはPerlの例。 #!/usr/local/bin/perl use strict; use warnings; use utf8; binmode STDOUT, ':utf8'; sub say { print @_, "\n" }; say ord "\x{61}"; say ord "\x{3b1}"; say ord "\x{5F3E}"; say ord "\x{2A6
昨日のはてなのホットエントリーに『入門ベイズ統計』の読みどころという記事が載っていました。ベイズ理論の人気は根強いですね。 ベースとしての数式は割とシンプルなので、自分で実装してもそれ程手間は掛からないかもしれません。しかし、CPANのモジュールとして提供されているので、そちらを使用するのも良いかと思います。私が知っている所では、Algorithm::NaiveBayesが簡単で使いやすかったです。 昔書いたコードですが、下のサンプルでは簡単なスパムフィルターを作っています。spam.txtとham.txtは、それぞれのコーパスを形態素解析して作った単語のみのリストです。test.txtは、判定したい文章から抽出した単語のリストです。スパムとハムの量を増やせば、これだけでも割と使い物になります。 応用例としては、スパムとハムの2種類のカテゴリだけではなく、複数種類のカテゴリを作ればブログの
ここ数日、私を悩ませた「@_の要素アドレス可変問題」ですが・・・、結局、私の「参照渡し」についての認識不足が原因でした。 弾さんの力強い一言で閃きました。 Perlにおいて、引数を格納する配列@_は、常に参照(reference)です。値(value)ではありません。 http://blog.livedoor.jp/dankogai/archives/51076794.html 私は、「参照渡し」を知ってはいたのですが、どこかで、なぜかC言語でのポインター渡しと勘違いをしていたみたいです。 ということで、復習してみます。 まず、サブルーチン引数の引き渡しには以下の2種類があります。 実引数の値が仮引数に渡される(値渡し)。 実引数の参照が仮引数に渡される(参照渡し)。 値渡しは、仮引数を変更しても実引数は変更されません。 ポインター渡しも、実は、ポインターを値渡しているのです(C言語では、
2008年07月06日19:30 カテゴリLightweight Languages perl - 暗黙的な参照 # @_ と $_ Good Question! @_の要素の$_[0],$_[1]等は、格納するべきアドレスが可変! - 燈明日記 なぜ、こんな仕様にしたのだろうか・・・。 Good Question だけあって、Good Reasons もきちんとあります。 @_と$_の秘密 まず、事実を再確認しておきましょう。 Perlにおいて、引数を格納する配列@_は、常に参照(reference)です。値(value)ではありません。 これが何を意味するかというと、@_への書き込みが、呼び出し元への書き込みとなるということです。 実際に様子を見てみましょう。 [Run via CodePad] sub inc { ++$_[0] } my $a = 0; print $a, "\n"
普通、配列は以下のように、要素毎に代入しても、リストで一気に代入しても、要素のアドレスは変わりません。 use strict; use warnings; my @array; $array[0] = "1"; $array[1] = "2"; print "array[0]-> " . \$array[0] . "\n"; print "array[1]-> " . \$array[1] . "\n"; print "\@array-> " . $array[0] . $array[1] . "\n"; @array = ("A", "B"); print "array[0]-> " . \$array[0] . "\n"; print "array[1]-> " . \$array[1] . "\n"; print "\@array-> " . $array[0] . $array[1
Practical Mod-Perlという本があるのだけれど、その内容はオープンソースになっている。 mod_perlはいつかちゃんと勉強しなきゃと思っていたので読みはじめました。 んで、やっぱり書かないと覚えないし身に付かないし。 - CGIの歴史 まあ、これはね。問題ないでしょう。 HTTPを使ってデータをやりとりします。ヘッダとデータは空行で区切られます。リクエストを受け取ってレスポンスを返します。レスポンスではヘッダーでMIMEタイプとか文字コードとかを指定します。Apacheはmod_cgiを使ってスクリプトを実行します。環境変数を使っていくつかのパラメータを受け取れます。HTTP_USER_AGENTは簡単に偽装できます。HTTP自体にはURIの長さ制限がないけどサーバーとクライアントにはあるので注意しましょう。ユーザーから受け取った値を使ってレスポンスを作成する場合はクロスサ
404 Blog Not Found:perl - myとourとscopeと みんな難しく考えすぎです。 (例外については後で考えることにして)とりあえず以下の基本をおさえておけば混乱することはないと思います。 ■ our 宣言について our はグローバル変数をスマートに使用するための宣言です。our は use vars と等価と考えてください。 our $var; は use vars qw($var); と等価。 our $var = 1; は use vars qw($var); $var = 1; と同じ動きをするもの、と覚えておけばOKです。それ以上の違いは基本的にないと考えて構いません。 ひとつ実用上の違いがあるとすれば、our は Perl 5.6 以降の built-in なのに対して、use vars は vars.pm の Perlスクリプトで実装されています。し
コードの書きやすさは3つともそれほど違わないように思えます。ただ、読みやすさはダントツで Python が 優れています。Ruby はまずまずで、Perl は書き手の技量による部分が大きいのですが、 一般的には "読めない" コードになりがちです。 現在の人気を無視して、言語そのもののよしあしを考えると、 Python と Ruby はほぼ互角でしょう。しかし、今のところ Python の方が、 実行速度が速く、ライブラリが豊富なので、とりあえず Python を使うことにします。 また、Python には対話モードがあるのも Lisp に慣れた人間にとってはありがたいです。 Ruby は今後の健闘に期待します。 5. おわりに 以上 Perl, Python, Ruby の比較をつれづれと書きましたがご参考になりましたでしょうか? 結論は、 Python, Ruby は Perl に比べ
Shibuya Perl Mongers Tech Talks #8 いってきました ちょうど日本に帰ってきた時期と台湾から gugod が来日するのがかぶっていることで実現した Shibuya.pm Tech Talk #8 にいってきました。 YAPC::EU でやった Web::Scraper のトークを修正したものを20分で。今回は前半をとばし気味にやったのでなんとか時間に間に合ったかんじです。スライドはいつものように slideshare にあげておきました。 会場の質問でもでましたが、process() などの DSL を使わないAPIを求めているニーズは結構ありそうだなと思いました。この辺はバックエンドのAPIをOOで書き直して、その上に scrapi とか scRubyt のラッパーをかけていくというのがいいかもしれません。 他のトークでは gugod の JavaScri
ref:ここギコ!: 安易なループは慎むべきですね ref:jnaoyaのはてな日記 - 添削その2 ref:404 Blog Not Found:perl - 勝手に添削^2 - loop control ん?ループ云々を抜きにして、こういうのは Regexp::Assemble の出番じゃないの?添削だから?それともパフォーマンスとか? use Regexp::Assemble; my %analyze = ( qr/Pattern 1/ => 'Pattern 1', qr/Pattern 2/ => 'Pattern 2', qr/Pattern 3/ => 'Pattern 3', ); my $re = Regexp::Assemble->new; $re->track->add(keys %analyze); while (my $log = $logs->readline)
企業の言語選択は、どれほど人材採用に影響があるのだろうか。 楽天が先日ruby on railsを採用するという話がニュースになった。ruby会議のスポンサーにもなっているようだ。 楽天はJavaとPHPを使っているとのことで、Javaのエンジニアがライトウエイト言語でRubyに行くというのは割と僕も正当なパスだと思うので、基本的に納得である。 最近、一つ納得がいかないのは、オープンソースやらネット上で技術者が目立たないと、まるでその会社には技術屋がいないような扱いになってしまう点。 さらっと見つけてみたのだが、代表的な発言として、404 Blog Not Foundさんの > 楽天の苦点 そして「中の人」の存在感がほとんどない。これは、ネットならではの事情なのだが、成功しているサイトのほとんどが、何らかの形でその技術力が外から伺えるようになっている。はてなや37signalsのように、中
2007年04月18日06:45 カテゴリLightweight Languages perl - to goto or not to goto, that's the continuation Perlでもgotoを使えば、本当の継続(continuation)が可能であることを示す。 継続ってなんのことだかさっぱりわからない一は、以下にあらかじめ目をとおしておいていただきたい。 なんでも継続 なんでも継続、Perl で。 : torus solutions! 404 Blog Not Found:継続は力なり Tociyuki::Diary - Perl 5.8 で似非継続 Perl 5のgotoには、3種類ある。 goto LABEL こちらはCなどで見られるgotoと等価である。 goto END; print "Hello\n"; END: print "Goobye\n"; G
2007年04月19日04:15 カテゴリLightweight Languages perl - 勝手に添削^2 - loop control 他にもつっこみどころはあるのですが今回は、loop controlに的を絞って。 Perl Best Practices Damian Conway [邦訳:Perlベストプラクティス] ここギコ!: 安易なループは慎むべきですね jnaoyaのはてな日記 - 添削その2 [H.Iさんのコメントを受け加筆訂正アリ] まずは、DCONWAY先生の一言から。Loopに関する黄金則です。Perl以外でも有効。 Reject As many iterations as possible, as early as possible. 繰り返しは排除せよ、それもなるべく早い段階で 以下をご覧下さい。 jnaoyaのはてな日記 - 添削その2 while (m
2007年04月09日16:15 カテゴリLightweight LanguagesTips perl - パッチなしでパッチする Perlに限らず、動的に名前空間を書き換えることができる言語ならコンセプトはパクれるはずのtips. 状況 人様が書いたモジュールにバグ発見! バグ直した パッチも送った でも作者が$VERSION++してくれない さあどうする? オレバージョンのモジュールをつなぎでつかう? でも標準でないものをイントールするのはいやん サブクラス作ってメソッドをオーバーライドする? でも問題のモジュールが継承をサポートしているとは限らないし そもそも問題のモジュールOOじゃなかったりもするし 代替モジュールを書いてCPANにうp? -- i.e. JSON::* でも元々のモジュールがあまりによく使われているし うpは簡単でもサポート大変そうだし.... 実例 See Al
YAPC::Asia 2007 Tokyo で発表した資料を公開しました。 Yoshinori Takesako - s/ Perl5 Regular Expression / Perl6 Regex and Rule /mixes; Perlの黒魔術の一つであった正規表現。後付の拡張を繰り返した結果、問題解決の強力な武器に成長した反面、人間にも計算機にも読みにくい諸刃の剣にもなってしまいました。そこで再設計されたのがPerl6! 正規表現の書き方がPerl5からどのように変わるのか、これからPerl6のプログラムを書いてみようという人向けにわかりやすく解説します。 Software Design 2007年2月号の巻末特別企画「先取り Perl6正規表現カタログ ~ Perl5からの変更点を徹底解説!」の記事がベースになっています。 Perl6ではPerl5からの後方互換性は考慮しなくな
YAPC::Asia Hackathon at Dan the hotel hackathonが終わるまでがYAPCという事で、ほぼ無事に終わりました。 成果としては、はてブの大文字小文字問題を皆で直していたとか、そういうのは合ったですが、もうちょいまともなのも有ります。 hackathonいく前に、調子に乗ってミサイルランチャー買いにいったのですが4000円くらいのが1000円で投げ売りされていたので大人げも無く買い占めてから参加しました。 で、自分のマシンにいっぱい繋げて遊ぼうかと思ったらMacだとDevice::USBのtestが通らなくて、周りの人にも聞いても動く気配が無く迷ってる所で。 ちょうどmiyagawaさんがircにDevice::USB::MissileLauncherの人のgregを発見してDevice::USB::MissileLaunchersを教えていました。(
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く