タグ

perlに関するmitsuki_engawaのブックマーク (51)

  • 二重エンコードの話についての補足 - *「ふっかつのじゅもんがちがいます。」withぬこ

    AJITOで酒を飲みながらid:nTeTsと昨日書いた記事についてしゃべっていて、id:nTeTsがこの問題をPerl文字列の内部表現やUTF8フラグに関わる問題と認識している節があった。それは単に間違っていて、この問題はPerl固有ではないしPerl文字列の内部表現などは一切関係ないのだが、まあ混乱しても無理はないとも思うのでその辺について補足してみたい。なお僕はPerl5.8からPerlを使い始めたので、当の歴史的な経緯などは知らない。現状の仕様からリバースエンジニアリングして歴史的経緯を推測したにすぎないので、誤りが含まれる可能性は指摘しておく。 Encode::encodeとEncode::decodeのシグネチャを仮想的に型付きで表現するとしたら、理想的には次のようになっているべきである。 //decodeはバイナリ(:byte[])から内部表現(:String)への写像 St

    二重エンコードの話についての補足 - *「ふっかつのじゅもんがちがいます。」withぬこ
  • Perlで日本語文字列が文字化けしてるかどうか推測する&修復する - *「ふっかつのじゅもんがちがいます。」withぬこ

    ちょっと最近Buzzurlに自作スクリプトか何かで、大量の二重エンコード文字列を含むブックマークが投稿されたので対策のために調べてみたことのまとめ。<追記>id:miyagawaさんのブクマで Encode::DoubleEncodedUTF8 というモジュールを教えてもらいました。調べたら作者もid:miyagawaさん。二重エンコード是正にはこちらを使うようにしましょう。 でもこれ"二重エンコード perl utf8"とかでぐぐったけど見つからなかった…。id:miyagawaさんのブログとかもっと検索に引っかかるべきだと思うのだが。 PerlでUTF8文字列を使うときの原則 PerlでUTF8文字列を扱うならば、Encodeの神であるところのid:dankogaiが何度も何度も口をすっぱくして言っている次の原則に従わなければならない。そうしないとすごく不愉快な目にあう。 入り口で d

    Perlで日本語文字列が文字化けしてるかどうか推測する&修復する - *「ふっかつのじゅもんがちがいます。」withぬこ
  • はてなブログ | 無料ブログを作成しよう

    思いは言葉に。 はてなブログは、あなたの思いや考えを残したり、 さまざまな人が綴った多様な価値観に触れたりできる場所です。

    はてなブログ | 無料ブログを作成しよう
    mitsuki_engawa
    mitsuki_engawa 2009/08/20
    あー、オペレータってそういうことかーwww なんか目からうろこ。
  • 汚いなさすがPerlきたない - firewood's diary

    Shibuya.pm #11「no Perl; use x86;」鑑賞してきた。 常々PerlはLLじゃないんじゃないかと思っていたのだが、LLの皮をかぶったアセンブラであることを再確認したのであった。 1. catcher in the int 80h; inside lleval FreeBSD::i386::Ptraceの実装について。 pt_to_sce()でsystemcallを実行直前にフックできる。スタックに積まれた引数を書き換えることができるので、実行したくないオペレーションであればSEGVで死ぬような引数に書き換えることでsandboxを実現。 forkは引数がないのだが、EIPを0に変更することはできるので、それで殺す。アドレス0にmmapされるとSEGVで死ななくなってしまうのでそれも抑止する。 2. Perl sandbox for Linux fork() sys

    汚いなさすがPerlきたない - firewood's diary
    mitsuki_engawa
    mitsuki_engawa 2009/04/23
    「LLの皮をかぶったアセンブラ」
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • TAKESAKO @ Yet another Cybozu Labs: Pure Perl で Acme::x86::CPUID を作りました

    Perlでアセンブリプログラミングしているとき、実行マシンのCPUを判別してプログラムの処理を分岐したいときがでてくると思います。 そういうときに困ってしまわないように Acme::x86::CPUID を作ってみました。 package Acme::x86::CPUID; use DynaLoader; sub ProcessorBrandString { my $cpu = "\0" x 48; my $x86 = "" . "S\xbf" . pack("P", $cpu) . "\xb8\x02\x00\x00\x80" . ("P\x0f\xa2\x89\x07\x89_\x04\x89O\x08\x89W\x0c\x8d\x7f\x10X\x8d\@\x01" x 3) . "[\xc3" ; DynaLoader::dl_install_xsub("X",unpack"L",

    mitsuki_engawa
    mitsuki_engawa 2009/03/25
    「100% Pure Perl 」ww/Rubyでもやってみた http://mitsuki.engawa.org/Ruby/20090325_cpuid.html
  • Perl で Win32::API プログラミング入門 - 竹迫の近況報告

    ActivePerl (Windows版) には Win32::API - Perl Win32 API Import Facility - metacpan.org が付属しているので、今日からすぐに Win32::API を利用したプログラミングが出来ます。 簡単なメッセージボックスを表示するPerlプログラムは以下になります。 #!/usr/bin/perl use Win32::API; my $MessageBox = Win32::API->new("user32", "MessageBoxA", "NPPN", "N"); $MessageBox->Call(0, "Hello, World!\n", "Message", 0); このプログラム実行すると、「Hello, World!」と書かれたWindowsメッセージボックスが表示されます。 これを Win32::API

    Perl で Win32::API プログラミング入門 - 竹迫の近況報告
    mitsuki_engawa
    mitsuki_engawa 2009/03/24
    h=push
  • perl - FreeBSD::i386::Ptrace released! : 404 Blog Not Found

    2009年03月14日22:30 カテゴリLightweight Languages perl - FreeBSD::i386::Ptrace released! FreeBSD::i386::PtraceをCPANに上げたのでお知らせします。 /lang/perl/FreeBSD-i386-Ptrace/trunk - CodeRepos::Share - Trac Dan Kogai / FreeBSD-i386-Ptrace/ - search.cpan.org http://www.dan.co.jp/~dankogai/cpan/FreeBSD-i386-Ptrace-0.01.tar.gz FreeBSD-i386専用ですが、これを使うと、ptrace(2) を Perl からお手軽に使うことが出来ます。 以前からあったらいいなと思っていたのですが、いざ作ってみるとあっさり出来

    perl - FreeBSD::i386::Ptrace released! : 404 Blog Not Found
  • FreeBSD/i386 な環境で perl のコードを実行する方法 - 竹迫の近況報告

    今日からはじめての FreeBSD プログラミング、ということで、 まず最初に execve() を使って Hello, world! するプログラムを書きました。 8048080: 68 2d 65 00 00 push $0x652d 8048085: 89 e6 mov %esp,%esi 8048087: 68 6c 00 00 00 push $0x6c 804808c: 68 2f 70 65 72 push $0x7265702f 8048091: 68 2f 62 69 6e push $0x6e69622f 8048096: 68 2f 75 73 72 push $0x7273752f 804809b: 89 e7 mov %esp,%edi 804809d: 68 5c 6e 22 00 push $0x226e5c 80480a2: 68 72 6c 64 21 p

    FreeBSD/i386 な環境で perl のコードを実行する方法 - 竹迫の近況報告
  • perl から任意の C ライブラリを呼び出す方法 - kazuhoのメモ置き場

    syscall って組込関数でシステムコールはできますけど、libc やその他ライブラリの関数を呼びたい、ってこともありますよね。i386 かつ dlopen な環境なら、こんな風に書けます。 use DynaLoader; use ops; sub ccall { my $r = '1111'; my $s = "\x68" . pack("L", $_[5]) . "\x68" . pack("L", $_[4]) . "\x68" . pack("L", $_[3]) . "\x68" . pack("L", $_[2]) . "\x68" . pack("L", $_[1]) . "\xb8" . pack("L", ("Dyna"."Loader")->can("dl_find_symbol")->(("Dyna"."Loader")->can("dl_load_file")->

    perl から任意の C ライブラリを呼び出す方法 - kazuhoのメモ置き場
    mitsuki_engawa
    mitsuki_engawa 2009/03/13
    なんかN88-BASICのDATA/READ/POKEを思い出した。
  • Dan the API shell 書いた - tokuhirom's blog

    Dan the API shell 書いた http://gist.github.com/77254 Dan さんの perl eval API が便利だとおもった。どんなコードが実行できるのかためしたかったので、shell っぽく eval することにした。 Term::ReadLine で shell っぽく入力させて、URI::Escape でエスケープして、LWP::UserAgentAPI になげて JSON.pm で eval させてるだけ。 以下は実行例 dan> use XML::LibXML; Warning: XML::LibXML compiled against libxml2 20703, but runtime libxml2 is older 20702 dan> unpack 'p', 0xdeadbeef; dan> print "$ENV{SERV

  • Ajax - perlを実行するAPI : 404 Blog Not Found

    2009年03月10日22:00 カテゴリLightweight Languages Ajax - perlを実行するAPI つくっちゃいました。 「404 Blog Not Found:Ajax - Lightweight Languages を実行するAPI」に置き換えられました。 まずはこれをご覧ください。 use strict; use warnings; use YAML::Syck; use Data::Dumper; my $n=1; print "DATA[",$n++,"]:$_" for <DATA>; print Dumper(\%INC); print YAML::Syck::Dump(\%INC); use Test::More 'no_plan'; is(1,1); is(1,0); __DATA__ use this instead of STDIN like

    Ajax - perlを実行するAPI : 404 Blog Not Found
    mitsuki_engawa
    mitsuki_engawa 2009/03/11
    Perl in the box.
  • $job->done('well'); # 書評 - モダンPerl入門 : 404 Blog Not Found

    2009年02月09日00:00 カテゴリ書評/画評/品評Lightweight Languages $job->done('well'); # 書評 - モダンPerl入門 翔泳社再帰、じゃなかった斎木様より献御礼。 モダンPerl入門 牧大輔 初出2009.02.03; 発売開始まで更新 モダンPerl入門とどいた - D-6 [相変わらず根無し]「モダンPerl入門」が届きました。翔泳社様、ありがとうございます>< うちにも届いたので早速拝見。 これほどの出来だとは! DMAKI++ あ…ありのまま 今 読んだ事を話すぜ! 書「モダンPerl入門」を一言で言うと、「Perl Cookbook」と「Perl Best Practice」と「Advanced Perl Programming」と「ミニマルPerl」のエッセンスを取り出し、そしてそれを最新の「モード」へと昇華した一冊。

    $job->done('well'); # 書評 - モダンPerl入門 : 404 Blog Not Found
  • Catalyst で簡単 Flash Remoting サーバーサイド開発 - KAYAC Engineers' Blog

    perl のイベントで空気を読まず Flash についての発表をしたり、Ajax のテーマの原稿で空気を読まず Flash について書いたりしている村瀬です。こんにちは。 先日 adobe が AMF (Action Message Format) の仕様を公開してくれたので、それではと perl で AMF パーサーを書いてみました。 Data::AMF この中の Data::AMF が AMF のデータ部分のみをパースするモジュール。Data::AMF::Packet が Flash Remoting などでつかわれる AMF パケットをパースするモジュールとなっています。 ということで、Data::AMF::Packet を使用すれば Flash Remoting のサーバーサイドを開発することはできるのですが、AMF パケットを素で扱うと若干面倒な実装をする必要があります。そこで、

    Catalyst で簡単 Flash Remoting サーバーサイド開発 - KAYAC Engineers' Blog
    mitsuki_engawa
    mitsuki_engawa 2008/07/25
    AMF(Action Message Format)
  • perl - 暗黙的な参照 # @_ と $_ : 404 Blog Not Found

    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"

    perl - 暗黙的な参照 # @_ と $_ : 404 Blog Not Found
    mitsuki_engawa
    mitsuki_engawa 2008/07/07
    コメント読みつつ「うる星やつら」の「宇宙は大変だ!」が脳内再生された。歌詞を書けないのがとても残念です。
  • PL_check とパトリオットミサイルのしくみ - daily dayflower

    前回の記事はおかげさまで id:yappo さんに HE-N-TA-I 認定されたので安心してたら,マッチョな人に牛刀フラグを立てられ(もちろん冗談です*1),Shibuya.pm 入会への道もなかなか険しいなぁと思い知りました。 そんな空気は読まずに理論編?を Perl 5.8.8 のソースをもとに書いていきます。マニア向け。 Perl がスクリプトを実行するまで perlguts の Compiled code セクションと Perl のソースコードをもとに,おおまかな実行機序を書いてみました。 字句解析器(レキサ; toke.c) 字句エラーの検出 構文解析器(パーサ; perly.y*2) 構文エラーの検出 OPCODE ツリーに変換; new*OP() in op.c check ルーチンの実行(pass 1) (文脈にもとづく)文法エラーの検出 by 各 PL_check[](

    PL_check とパトリオットミサイルのしくみ - daily dayflower
  • PL_check hack - daily dayflower

    (あとでかく) XS くらいいじれないと Shibuya.pm に加入できないらしいので,とりあえず書きましたー。今回は実践編なので,あまりわかりやすい内容&たいした内容ではないです。わっふるさせてごめんなさい。 ゴール #!/usr/bin/perl eval 'print "Hello ' . $ARGV[0] . '!\n"'; とか危険ですよねー*1。こんな機能があるなんてけしからん。ですので,eval の実行を抑制するモジュールを書いてみました。 というのは冗談で,eval の実行主体となる OPCODEが,システム内で「完結」してます(んーうまく表現できない)。なのでサンプルとしていじりやすく,この題材をとりあげました。 評価型 eval はどのような OPCODE に変換されるのか まずは単純なコードを書いて,OPCODE がどのようになるのかたしかめてみます。 use st

    PL_check hack - daily dayflower
  • ふるさと再訪 - 書評 - ミニマルPerl : 404 Blog Not Found

    2008年06月23日00:05 カテゴリ書評/画評/品評Lightweight Languages ふるさと再訪 - 書評 - ミニマルPerlJavaScript & DHTMLクックブック 第2版」と一緒に献頂いたのが、こちら。 ミニマルPerl Tim Maher / 安藤慶一& 磯部孝一郎訳 [原著:Minimal Perl] ああ、癒される。 ♪grepで追いし かのlog ♪sedで直し かのsource ♪Unixは今もめぐりて ♪離れがたきふるさと Perlの原点が、ここにある。 書「ミニマルPerl」は、ミニマル、すなわち「最低限文化的な電脳生活」を送るための道具としてのPerl入門。 今や、スクリプト言語の長女として各方面で大活躍し、PythonRubyといった「妹」たちのユーザーからも一目おかれ、その一方で「妹萌え」なギークから「ブス」と陰口も叩かれること

    ふるさと再訪 - 書評 - ミニマルPerl : 404 Blog Not Found
  • ファイルハンドルをめぐる冒険(ただしマニア向け) - daily dayflower

    以下は Perl 5.8.8 のソースを元に記述しました。Perl 5.10 でもそう変わってはいないと思いますが,結構内部が変更されているので違うかもしれません。大まかには同じだと思います。 イントロダクション Perl でのファイルハンドルは内部的には [http://search.cpan.org/perldoc?IO::Handle:title=IO::Handle] オブジェクトとして保持されています。そのような記述は perl5004delta くらいでしか見つかりませんでした。ラクダにもなかったような。 Internal change: FileHandle class based on IO::* classes File handles are now stored internally as type IO::Handle. The FileHandle module

    ファイルハンドルをめぐる冒険(ただしマニア向け) - daily dayflower
    mitsuki_engawa
    mitsuki_engawa 2008/06/06
    ファイルハンドルとグロブの黒魔術。Perl4の頃は関数にファイルハンドル渡すためだけにGLOB使わされて、なんでやねんだったなあ・・。
  • 404 Blog Not Found:perl - ワンライナーの書き方入門

    2008年03月30日19:45 カテゴリLightweight Languages一日一行野郎 perl - ワンライナーの書き方入門 まあ、ruby のコマンドラインオプションって、Perl由来ですから。 Rubyでワンライナーを書く方法のまとめ まぁ、Perlもあるしあんまり需要が無いのかも知れませんが。 というわけで、Rubyistにも役立つPerlのワンライナー入門です。 基中の基 コマンドとしてのperlは、スイッチがない場合、引数はスクリプト名として扱われます。 % cat hello.pl print "Hello, world!\n"; % perl hello.pl Hello, world! % コマンドライン中の文字列をスクリプトとして解釈させるには、-eを使います。 % perl -e 'print "Hello, World!\n"' Hello, worl

    404 Blog Not Found:perl - ワンライナーの書き方入門