Perlが30倍速くなるかもしれないSPVMの開発版をリリースしました。 SPVM(CPAN) かもしれないと書いたのはベンチマークをまだとってないからで、理論的にはJava VMの速度まで、近づけることができるんじゃないかなと思うから。 開発版なので、まだ機能が足りないのだけれど、CPANにリリースして、CentOS, FreeBSD, Windowsで動かすところまでやったので、ここで公開します。Macを持っていないので、Macの方は、CPANからインストールできるか確認していただけるとありがたいです。 SPVMはPerlに似た新しいプログラミング言語で、バーチャルマシン上で動き、関数をPerlから簡単に呼び出すことができる。 完全な静的型を持ち、Javaと同じデータ型、byte, short, int, long, float, doubleを持つ モジュールを書いてすぐに実行できる
なんらかのリストの要素、要素に処理をするなんて場面よくありますよね。んで、そんなとき、リストが長大で 1 件ずつやってたら埒が明かなくて、適当な件数ごとに分割してぬるぬるしないとやってられない、みたいな深遠な事情もありがちですよね。 さて、まあ、そんなのを、毎度書くのに飽きたので、少し楽できそうなモジュール書いてみました。 Sub::Sequence こんな感じです。 use Sub::Sequence; my @user_id_list = (1..10_000_000); seq \@user_id_list, 50, sub { my $list = shift; my $in_id = join ',', map { int $_; } @{$list}; # UPDATE table SET status=1 WHERE id IN ($in_id) sleep 1; }; us
http://d.hatena.ne.jp/tokuhirom/20120413/1334282197 を勝手に添削。 my $src = "11*3+2/2"; use Data::Dumper; print Dumper(parse($src)); exit; sub parse { my $src = shift; my $ret = expression(\$src); if ($src) { die "Parse failed: $src"; } $ret; } sub expression { my $src = $_[0]; my $expr = term($src); while (my $op = match($src, qr/[+-]/)) { $expr = [ $op, $expr, term($src) ]; } $expr; } sub term { my $s
http://tora-lang.org/ Perl6 の開発が宣言されてから10年以上の歳月がたち、いまだ実用的な実装はあらわれません。 そんななかで、next perl 的なものをつくりたいと gfx がいってから 3ヶ月ぐらいたっていますが、こちらも一行もコードをかいた様子はありません しょうがないので僕がつくってみました。まだあらけずりですが、意外とうごいています。 今回、とくに Perl5 にあった機能のなかでけずりたかったものは以下のとおり context@ary, %hashつけたかったものは以下のとおり autoboxingMoose 的なものの組み込みハックしやすいVM組み込みライブラリの実装しやすさ 未実装な点は以下のとおり Moose 的なアクセサSignal handlingこまかい socket 関連のものHash::MultiValue の組み込みなどなど。 g
ファイルの保存 ここまでいくつかの見落としがちな処理を見てきましたが、最後にどんなプログラマでも必ず行う「ファイルの保存」についての注意点を考察してみたいと思います。 ファイルを確実に書き込むためには、どのようなコードを書けばよいでしょうか。「fsync」を呼べばいい。それだけではありません。実際には、次の2点も必要になってきます。 (内容の差し替えだった場合に)書き換え途中の状態にならないこと ユーザに対して書き込み完了を返したあとは、ディスクがクラッシュしない限り、データが消えないこと UNIX系OSでこれらの要件を満たすには、まずテンポラリファイルに新しいデータを書いてディスクに同期し(①②)、(必要ならば)古いファイルをバックアップファイル名を使っても参照できるよう別名を付与し(③)、次にテンポラリファイルのファイル名を差し替え対象になっているファイルの名前に切り替え(
ネットワークプログラムとSIGPIPE 「私の書いたサーバが突然死するんです。どうしてでしょうか」という質問を受けることがあります。これは多くの場合、SIGPIPEの処理を忘れていることが原因です。SIGPIPEとは、切断されたネットワークソケットなどにデータを書き込もうとした際に送出されるUNIXシグナルです。特に設定しない限り、プロセスはSIGPIPEを受け取ると強制終了されます。そのため、通信が突然切断される可能性のあるTCPサーバにおいては、SIGPIPEを無視するよう設定する必要があります。 # デフォルトの動作(SIGPIPEの場合はプロセスの終了)に設定 $SIG{PIPE} = 'DEFAULT'; # SIGPIPEを無視するよう設定 $SIG{PIPE} = 'IGNORE'; # SIGPIPEを受信した際に実行するサブルーチンリファレンスを # 設定 $SIG{PI
forkとファイルハンドル UNIX系のOSでは、複数のプログラムが、それぞれプロセスという単位で動作しています。forkというシステムコール[1]が呼び出されると呼び出したプロセスの複製がOSによって作成され、複製されたプロセス(子プロセス)がexecveというシステムコールを使って別のプログラムにすり替わる、というしくみでさまざまな処理を実行するようになっています。 「複製」と言っても、全部の情報が複製されるわけではありません。プロセスのメモリイメージが複製される[2]一方で、プロセスが開いている「オープンファイル記述」(open file description)(注3)は複製されません。forkのあとは、親プロセスと子プロセスの両者が、単一のオープンファイル記述を指す「ファイル記述子」(file descriptor)(注4)を持つことになります(図2)。 図2 for
本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーはJapanizeやText::MicroTemplateなどで有名な奥一穂さんで、テーマはUNIXプログラミングです。 はじめに 「正しいプログラム」を書くために必要な知識とはなんでしょうか。テストが正しく実行されることは、正しいプログラムであるための必要条件に過ぎません。プログラミングにおいてはプログラミング言語だけでなく、OSの動作やデータベース、ネットワークプロトコルなど、さまざまな知識が必要になります。 PerlはもともとUNIX系のOS(LinuxやFreeBSD、Mac OS XなどのOSを本稿では以下UNIXと総称します)の上で処理を行うためのスクリプト言語として開発され、今日でもPerlプログラムの多くはUNIX上で実行されています。しかし、「Perlでプログラミング」と言った場合はともすれば
たとえばこんな。 Rakudo Star ではどれも実装済み。今すぐ使えます。 強化された正規表現 Perl 6 の公式なパーサ自体も Perl 6 の正規表現で書かれています。 ……は置いといて。10行ちょっとで CSV をパースする正規表現が書ける。クォートされた値にも複数行にまたがる値にも対応。 # CSV クラスは以下のものを修正して使っています # http://github.com/masak/csv/blob/master/lib/Text/CSV.pm # 正規表現をまとめた grammar (クラスの一種) grammar CSV { regex TOP { ^ <line> ** \n <empty_line>? $ } regex line { <value> ** ',' } regex value { | <pure_text> | \s* \" <quoted_
Last Updated: 2002/03/26 Perl で、16進文字列、10進整数、2進文字列、バイナリー文字列の相互変換を行うための、スクリプトメモです。 特に断っていない限り、Perl 5.001 以上で動作します。 目次 16進文字列からの変換 10進整数からの変換 2進文字列からの変換 バイナリー文字列からの変換 16進文字列→10進整数への変換 hex() 関数は、16進文字列を整数値に、手軽に変換できます。 $num10 = hex("4A"); # $num10 には 74 が入る $num10 = hex("FFFFFF"); # $num10 には 16777215 が入る 余談ですが、数値リテラル中では 0x に続けて 16 進数で記述することで、数値を表すことができます。 $num10 = 0x4A; # 74 $num10 = 0xFFFFFF; # 1677
Perl のローレベルエラー処理 (もしくは Errno.pm のススメ) - JPerl Advent Calendar 2009 Perl に関するちょっとした Tips をのっけてみるよ。ちゃんと続くかな? 例えば、「ディレクトリが存在しなければ作成」という処理を書くことを考えてみます。 if (! -d $dir) { mkdir $dir or die "failed to create dir:$dir:$!"; } でいいしょうか? いえ、違います。これだと、-d 演算子でディレクトリの不存在を確認した後、mkdir を呼ぶまでの間に他のプロセスがディレクトリを作成してしまう可能性があります。なので、たとえば C ならば、 if (mkdir(dir) != 0 && errno != EEXIST) { fprintf(stderr, "failed to create d
最近は、PHPのMVCフレームワーク「symfony」関連の活動と、多治見IT勉強会などをやっています。 Googleプロフィール ブログへのコメントやツッコミ、twitterやFriendFeedでのreplyなどお気軽にお願いします! Latest Posts 360件のエントリ [12/02]技術系アドベントカレンダー2009のまとめ [12/02]多治見IT勉強会 大忘年会を12/18(金)に開催します [11/25]多治見IT勉強会 第2回もくもく会を11/26に開催します [11/14][golang]CGIでGO!で使ったパッケージなどのメモ [11/14][golang]CGIでGO! [11/05]多治見IT勉強会(第8回)のお知らせ [10/27]北陸アンカンファレンスに参加します [10/26]GALONGE文明崩壊 [10/19]LSL Convention J
via www.flickr.com I combined all of the great works done by tokuhirom, kazuho, nipotan and Sartak: render Devel::StackTrace object as an HTML. As a bonus, if you render WithLexicals object it will display the lexical variables with JS toggle button. Plack middleware and plackup has now been converted to use this new StackTrace screen. Pretty slick! Available at github and CPAN shortly.
''!~('(?{'.('? ?{..!? } .{.(!???.~(!}{! ^^ ?.){{?})'^'{!){~(?)?.!?{!}}!~{!}?}}!{^(^ !???(.)~'^' ~~.(~?)^}^~^){}(.{ ?!^) ^!?!?(()(}?^!'^'! !}!)(({!){!({)~(. ^..({?.{)~){)(!(^ '^' )(?{!{~~{{^ }!())~{ }^!{^)^()~!}!}!^^').'})') 元来、プログラマというのは怠惰なヒトたちであり、少しでも自分の作業がラクになるように色々なプログラムを開発してきたわけでして。 プログラムを書くにしてもできるだけラクに(タイプ数を少なく)、ということで「Code Golf」なんてのが考え出されたのだと思います。 Code Golf ところで、Acme::EyeDropsという変態モジュールは「記号だ
http://github.com/spiritloose/Schenker 前に Ruby の Sinatra を触ってみていいなとおもったので最近作り始めた。 ひととおり機能はそろってきたので公開してみる。 HTTP::Engine + HTTP::Engine::Middleware + HTTPx::Dispatcher + Sinatra風インターフェース みたいな感じのフレームワーク、っていうかDSL。 # myapp.pl #!/usr/bin/env perl package MyApp; use Schenker; get '/' => sub { 'Hello, world!'; }; get '/hello/:name' => sub { my $args = shift; "Hello, $args->{name}!"; }; で `./myapp.pl` すると動
あだ名の多さは人気の証明? POEという名前にはあきれるほど多くの寓意がこじつけられています。もともとはPerl Object Environment「Perlのオブジェクト環境」の頭文字を並べたものですが、POEの公式サイトを見てみると、Edgar Allan POE「エドガー・アラン・ポー」に始まり(そう、POEは「ポエ」ではなく「ポー」(ないし「ポゥ」)と読みます)、Parallel Object Executor「オブジェクトの並列処理機」、Pathetically Over-Engineered「涙がちょちょ切れるほど作り込みすぎた」、Perl Obfuscation Engine「Perl難読化エンジン」、Perl Objects for Events「イベント用Perlオブジェクト」、Persistent Object Environment「永続オ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く