Method for turning strings into code

Hi all,

What is the Ruby technique for turning strings into executable code?

SteveT

Steve Litt
http://www.troubleshooters.com
slitt@troubleshooters.com

eval

eval("3+3")

6

jf

···

On 12/30/05, Steve Litt <slitt@earthlink.net> wrote:

Hi all,

What is the Ruby technique for turning strings into executable code?

SteveT

Steve Litt
http://www.troubleshooters.com
slitt@troubleshooters.com

--
Johannes Friestad
johannes.friestad@gmail.com

Steve Litt wrote:

Hi all,

What is the Ruby technique for turning strings into executable code?

There's eval:

eval( 'class Foo;def x; puts "x"; end;end' )

Foo.new.x

And its variants (instance_eval, class_eval)

James

···

--

http://www.ruby-doc.org - Ruby Help & Documentation
Ruby Code & Style - Ruby Code & Style: Writers wanted
http://www.rubystuff.com - The Ruby Store for Ruby Stuff
http://www.jamesbritt.com - Playing with Better Toys
http://www.30secondrule.com - Building Better Tools

Steve Litt wrote:

Hi all,

What is the Ruby technique for turning strings into executable code?

Via one of the various forms of eval. However, using eval on arbitrary strings is insecure, so generally it's considered bad form. There's even a slogan: "Eval is evil." The preferred technique is to build a solution using Ruby's dynamic programming facilities.

Thanks James, and you to Johannes.

SteveT

Steve Litt

slitt@troubleshooters.com

···

On Friday 30 December 2005 10:51 am, James Britt wrote:

Steve Litt wrote:
> Hi all,
>
> What is the Ruby technique for turning strings into executable code?

There's eval:

eval( 'class Foo;def x; puts "x"; end;end' )

Foo.new.x

And its variants (instance_eval, class_eval)

James

> What is the Ruby technique for turning strings into
> executable code?

Via one of the various forms of eval.

Uh, well, that's not the right answer. Eval evaluates
(=executes) a string. It doesn't turn a string into executable
code (=compile).

gegroet,
Erik V. - http://www.erikveen.dds.nl/

Where do I find out more about Ruby's dynamic programming facilities?

SteveT

Steve Litt

slitt@troubleshooters.com

···

On Saturday 31 December 2005 06:07 am, Timothy Hunter wrote:

Steve Litt wrote:
> Hi all,
>
> What is the Ruby technique for turning strings into executable code?

Via one of the various forms of eval. However, using eval on arbitrary
strings is insecure, so generally it's considered bad form. There's even
a slogan: "Eval is evil." The preferred technique is to build a solution
using Ruby's dynamic programming facilities.

Erik Veenstra <pan@erikveen.dds.nl> writes:

> What is the Ruby technique for turning strings into
> executable code?

Via one of the various forms of eval.

Uh, well, that's not the right answer. Eval evaluates
(=executes) a string. It doesn't turn a string into executable
code (=compile).

Wrap it in a lambda, then.

···

gegroet,
Erik V. - http://www.erikveen.dds.nl/

--
Christian Neukirchen <chneukirchen@gmail.com> http://chneukirchen.org

When I first posed the question, what I really meant was turn it into Ruby
code (like eval does). Sorry for the confusion.

While we're on the subject, do you know of a way to turn a Ruby program into
an executable binary?

Thanks

SteveT

Steve Litt
http://www.troubleshooters.com
slitt@troubleshooters.com

···

On Saturday 31 December 2005 06:07 am, Erik Veenstra wrote:

> > What is the Ruby technique for turning strings into
> > executable code?
>
> Via one of the various forms of eval.

Uh, well, that's not the right answer. Eval evaluates
(=executes) a string. It doesn't turn a string into executable
code (=compile).

Steve Litt wrote:

Where do I find out more about Ruby's dynamic programming facilities?

The Pickaxe would be a good start. Also Hal's _The Ruby Way_.

> While we're on the subject, do you know of a way to turn a
> Ruby program into an executable binary?

If you want to distribute your Ruby application as a single
executable, including the Ruby interpreter and libraries, use
RubyScript2Exe:

http://www.erikveen.dds.nl/rubyscript2exe/index.html

(Yes, it's one of my own projects... But you asked me...)

gegroet,
Erik V. - http://www.erikveen.dds.nl/

Christian Neukirchen wrote:

Erik Veenstra <pan@erikveen.dds.nl> writes:

What is the Ruby technique for turning strings into
executable code?

Via one of the various forms of eval.

Uh, well, that's not the right answer. Eval evaluates
(=executes) a string. It doesn't turn a string into executable
code (=compile).

Wrap it in a lambda, then.

If I have a string in a file, would we say it was executable code? Or does loading it into the Ruby interpreter make it executable code?

What are the differences among

   require 'my-file-of-strings'

   load 'my-file-of-strings'

and

   eval( IO.read( 'my-file-of-strings' ) )

James

···

--

http://www.ruby-doc.org - Ruby Help & Documentation
Ruby Code & Style - Ruby Code & Style: Writers wanted
http://www.rubystuff.com - The Ruby Store for Ruby Stuff
http://www.jamesbritt.com - Playing with Better Toys
http://www.30secondrule.com - Building Better Tools