タグ

ブックマーク / pub.ne.jp (6)

  • wakaponさんの超☆掃き溜め帳: perlコマンドの皮を一枚はいでみる perlembed

    一皮むけよう 一皮むけて大人になろうぜ!!1。ただしむきすぎると痛い目にあう...。 そもそも皮をはぐとはなんぞや。普段Perlを使うときは、perlというコマンドを使う。このperlコマンドとは一体なんだろうか。答えは簡単で、perlという実行可能形式のファイルである。この実行ファイル(perlコマンド)は、引数にファイルがあった場合はそのファイルにあるperlプログラムを実行したり、-eというオプションがあったらワンライナーを実行したり、-Mならモジュールをロードしたりと、おなじみの動作をする。では、この動作はどこで行われているか。今回はそれを見るために、perlコマンドを一皮はいでみる。 一枚皮をはぐ前に、どれくらい皮がかぶってるのかを感覚的に書いてみた。 (perlコマンド ( perl embed ( perl_api ( S_perl_api (各種スタック、op_tree、s

    mattn
    mattn 2010/06/03
    大人のPerl講座
  • wakaponさんの超☆Perl備忘帳: system関数,fork関数,ithreadsのめもめも

    各関数の挙動に関するチラシの裏! system関数 親プロセス(system関数を発行したプロセス)は子プロセスを生成し,コマンドを実行させる.親プロセスは子プロセス終了まで自身をブロックする. system ("ls -alh"); # lsコマンドは子プロセスで実行.その間,親プロセスはsleep. fork関数 親プロセスからコピーを作り,子プロセスを生成する.fork関数の実行後,親プロセスと子プロセスの2つのプロセスが走り始める(windowsを除く).子プロセスは自身をexitするか,または親プロセスから制止させられない限り走り続ける. my $pid = fork; if ($pid > 0) # 親プロセスの返り値は子プロセスのpid { ... } elsif (defined($pid)) # 子プロセスの返り値は0 { ... } else # 子プロセス生成失敗 {

    mattn
    mattn 2008/11/26
  • wakaponさんの超☆Perl備忘帳: sv_isaとsv_derived_fromの違い UNIVERSAL::isa

    POOでのパッケージ間の継承関係を調べるPerlAPIはなし。まずはPerlプログラムレベルでの継承関係を調べるメソッドから進めて、その内部で使われているPerlAPIを見ていく。ほげり対象はperl5.10.0となる。 Perl5プログラムでパッケージ(クラス)の継承関係を調べるときは、基底クラスにあるUNIVERSALのisaメソッドを使えばよい。UNIVERSALはすべてのクラスのベースにあるので、特にuseしなくても、各クラス内のメソッドとして使える。以下、isaメソッドの使用例。 use 5.10.0; # use feature.pm (:all) package MY_BASE; sub new { bless {}; } package MY_BASE2; sub new { bless {}; } package HOGE; push @ISA, qw(MY_BASE M

    mattn
    mattn 2008/10/14
  • wakaponさんの超☆Perl備忘帳: Perl サンドボックス Safe.pm

    5.10.0のlibディレクトリをあさっていて、Safe.pmなる標準モジュールを発見したので使ってみる。Safeがどんなモジュールかは、Nameのところにある1文がすべてを示している。 Safe - Compile and execute code in restricted compartments 制限された仕切り部屋でコンパイルと構文木の実行を行う。要するに、危険と思われる機能を取り払ったサンドボックスを作って、その中でコードを実行する。おそらくこのモジュールは、安全かどうかわからないPerlプログラムを隔離された場所で実行したいなー、というときに使われる。 実際にモジュールの機能を実感してみる。まずは最初の一歩として、Safe.pmのrevalメソッドを使ったサンプルプログラムの実行から。(See also ファイル指定版のrdoメソッド) revalメソッドの利用例 # 実行環

    mattn
    mattn 2008/10/13
  • wakaponさんの超☆Perl備忘帳: XS xsubpp Dynaloader MakeMaker typemap

    XSをまったく使ったことが無かったので試してみることにした。XSUBをPerlに組込むわけではないので、xsubppで出力した結果(XSUB)を見ながらにやにやするにとどまる。 まずは、MODULE、PACKAGE、PROTOTYPE、INPUT、PREINIT、CODEから。今回は引数スタックをPPしないので、ただのCODE。以下に試したXSを示す。 hoge.xs MODULE = HOGE   PACKAGE = HOGE char * hoge_hello (num) PROTOTYPE:$ INPUT:    int num; PREINIT:    int i;    static char *no = "no";    static char *ok = "ok"; CODE:    if (num < 0)    { RETVAL = no; }    else    {

    mattn
    mattn 2008/06/17
  • wakaponさんの超☆Perl備忘帳: PerlOSのブートプロセス

    現在までに進行中のPerlOSのめもめも.とりあえずブートプロセスとその後のPerlドライバロードのめも. ブート時の構成は以下のとおり. ・画面出力ドライバ (C言語) ・割込みハンドラ (C言語) ・キーボードドライバ (C言語) ・フロッピードライバ (C言語) ・ファイルシステム (C言語; FatFSを使っている; Perl版read-onlyで作成済み) ・MULTIPLICITYマクロを有効にしたmicroperl (C言語; perl-5.8.8) ・microperlが動作するためのlibc (C言語; 古いnewlib) ・いくつかのPerlスクリプト (Perl) Perl処理系にはmicroperlを用いる.インタプリタインスタンスを複数で独立させたいので,MULTIPLICITYマクロを有効にしてコンパイルする. いくつかのPerlスクリプト,が次にシステムを制御

    mattn
    mattn 2007/12/09
  • 1