[#11156] How to delete methods from superclass? — Clemens Hintze <c.hintze@...>

Hello,

25 messages 1998/12/01
[#11157] Re: How to delete methods from superclass? — matz@... (Yukihiro Matsumoto) 1998/12/01

Hi, Clemens.

[#11176] English List [Re: How to delete methods from superclass?] — gotoken@... (GOTO Kentaro) 1998/12/01

In message "[ruby-list:11157] Re: How to delete methods from superclass?"

[#11250] Ruby 用語集 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

25 messages 1998/12/08

[#11269] 京都 (Re: [ruby-dev:3789] Re: List()) — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

21 messages 1998/12/11
[#11299] Re: 京都 — MAEDA Shugo <shugo@...> 1998/12/12

前田です。

[#11393] mod_ruby — shugo@... (Shugo Maeda)

前田です。

28 messages 1998/12/21
[#11394] Re: mod_ruby — matz@... (Yukihiro Matsumoto) 1998/12/21

まつもと ゆきひろです

[#11398] Re: mod_ruby — shugo@... (Shugo Maeda) 1998/12/21

前田です。

[#11399] RE: mod_ruby — OZAWA Sakuro <crouton@...> 1998/12/21

さくです。

[#11408] Re: Be port — shugo@... (Shugo Maeda) 1998/12/22

前田です。

[#11464] ruby and IDE — Noritsugu Nakamura <nnakamur@...>

18 messages 1998/12/27
[#11465] goto (Re: ruby and IDE) — ttate@... 1998/12/27

立石です。

[ruby-list:11170] 安直な perl 拡張

From: Yoshinori Toki <toki@...>
Date: 1998-12-01 14:24:21 UTC
List: ruby-list #11170
土岐です。

以前 Ruby から Perl を操作する拡張モジュールがあったら便利だという話が
ありましたが、ふと、Perl には eval 関数があるんだから、perl インタープ
リタを起動して perl スクリプトを文字列で送ってやって eval で評価させた
らいいんじゃないかと思いつきました。効率は非常に悪そうですが、わざわざ
C で書かなくてもすぐにできそうなので、とりあえず動くものを作ってみまし
た。

こいつは IO.popen で perl を起動して標準入出力で通信しているので print 
を実行させるとエラーになってしまうというジャンクな設計ですが、きちんと
プロトコルを設計して IPC で通信し、あと複雑な手続きを呼ぶときは perl 
側でまえもってサブルーチンを定義してそのサブルーチンを呼ぶようにするな
ど運用面で気をつければ、それなりに使えるものができるのではないかと思う
のですが、どうでしょう。

だれか perl にも詳しい ruby hacker が改造してくれないかなあ(他力本願)。

================ perl_eval.rb ================
#
#    perl_eval.rb
#        $Author: toki$
#        $Revision: 1.3 $
#        $Date: 1998-12-01 22:24:22+09 $
#
# --
#  説明:
#    ruby のための超安易な perl 拡張。
#    きわめて効率は悪い。
#

require "final.rb"

class PerlEval
  include ObjectSpace

  # perl インタープリタ
  PERL = "#{ENV['HOME']}/ruby/lib/perl_eval.pl"

  # perl インタープリタを終了する。
  def exit
    @perl.close
  end

  # perl インタープリタを起動する。
  def initialize
    @perl = IO.popen(PERL, "w+")
    define_finalizer(self, proc { self.exit })
  end

  # perl の式を評価する。
  def eval(expr)
    @perl.print expr.length, "\n"
    @perl.print expr
    @perl.flush
    case @perl.gets
    when /success/
      num = @perl.gets.to_i
      list = Array.new(num)
      num.times do |n|
	len = @perl.gets.to_i
	list[n] = @perl.read(len)
      end
      list
    when /failure/
      len = @perl.gets.to_i
      msg = @perl.read(len)
      fail msg
    else
      fail "unkown error."
    end
  end
end

================ perl_eval.pl ================
#!/usr/local/bin/perl
#
#    perl_eval.pl
#        $Author: toki $
#        $Revision: 1.2 $
#        $Date: 1998-12-01 11:22:45+09 $
# --
#  説明:
#    perl_eval.rb のための perl 評価用スクリプト。
#

require "flush.pl";

while (<STDIN>) {
  read(STDIN, $expr, $_);
  @eval = eval($expr);
  if ($@) {
    print "failure\n";
    print length($@), "\n";
    print $@;
  } else {
    print "success\n";
    print $#eval + 1, "\n";
    foreach $eval (@eval) {
      print length($eval), "\n";
      print $eval;
    }
  }
  flush(STDOUT);
}

----------------------------------------------------------------------
土岐 仁謙
神戸大学自然科学研究科前期博士課程物理学専攻高エネルギー物理学講座
Yoshinori Toki
HEP, Department of Physics, Faculty of Science, Kobe University
TEL:	+81 (78) 803 0543
FAX:    +81 (78) 803 0724
URL:	http://www.phys.sci.kobe-u.ac.jp/~toki/toki.html
Email:	toki@hep.phys.sci.kobe-u.ac.jp (public)
Email:  toki@freedom.ne.jp (private)
PGP fingerprint = D0 A8 90 AB 73 F8 34 FE  CE CA DB BF 01 30 C0 35

In This Thread

Prev Next