Entries from 2009-03-01 to 1 month

perl golf

$ perl -le'for$i(@a=(0..9,A..F)){print map"$i$_ ",@a}' 16進数のテーブルを表示するワンライナーを考える - すぎゃーんメモ printf %c 使って perl -e'printf"%02X%c",$_,$_+1&15?32:10for 0..255' と書いた方が2バイト短いかなと思いました。まだ縮むん…

呼び出し元のコンテキストで eval する方法

String::TT なんかがそうですけど、呼び出し元の変数を使いたい、ということがときどきあります。たとえば、 sub hello_to_alice { my $user = "Alice"; say_hello(); # "Hello to Alice!" と言ってほしい } って書きたいとか、そういうケースですね。結論か…

C で split をどう書くかという、昭和時代の自転車置き場の議論

でまあというわけで split/join とかしたい時は 99% 速度なんて気にしてないという法則から、普通に vector かえす split がとりあえずあったりいいんじゃないかなぁとか思うわけです。 split/join - はじめてのにき(2009-03-17) C++ の場合であれば 100% 同…

セキュアな XS ローダー

perl のプロセス内でサンドボックスを作ろうと思うと、少なくとも以下の2点が必要です。 オプコードの制限 DynaLoader::dl_install_xsub を利用したネイティブコード注入 このうち、オプコードの制限については、ops モジュールで行うことが可能です。一方…

Re URLを扱うテーブルを作るときにどうすべきか

数日前、 pathtraqの事例を詳しく知りたい URLを扱うテーブルを作るときにどうすべきか - 金利0無利息キャッシング – キャッシングできます - subtech に対し、 pathtraq は前方一致検索が必要だから算術系圧縮して varbinary(767) だけど、順序の維持が不要…

kill -KILL -1 の話

プロセスが増殖したり pgid が変わってたりすると kill するのが面倒になってくるわけで。そういうときは、 sudo -u www kill -KILL -1とかやると、特定ユーザーのプロセスを全部殺せるので便利。

perl から任意の C ライブラリを呼び出す方法

syscall って組込関数でシステムコールはできますけど、libc やその他ライブラリの関数を呼びたい、ってこともありますよね。i386 かつ dlopen な環境なら、こんな風に書けます。 use DynaLoader; use ops; sub ccall { my $r = '1111'; my $s = "\x68" . pa…

Perl で任意のアドレスを peek

804d000H から1バイト読む例。poke できないのかなー print unpack('P1', pack('L', 0x804d000)); 参考: http://pub.ne.jp/wakapon/?entry_id=1253761