Odpowiednik eval z PHP

Witam.
Tak jak w temacie, czy w ruby jest odpowiednik eval z php?
Dla przypomnienia zacytuję co to eval:
“PHP oferuje swoim programistom instrukcję eval, która wykonuje podany w ciągu tekstowym kod jako skrypt PHP.”

Pewnie będzie to dla Ciebie zaskoczenie, ale w Rubim do wykonywania kodu podanego w ciągu tekstowym służy metoda… eval :slight_smile:

http://www.ruby-doc.org/core-1.8.7/classes/Kernel.html#M001057

Drobna uwaga: w większości przypadków jest to niezalecany sposób programowania (podobnie jak w innych językach, np. JavaScript).

moze na przyklad exec uzyc, hmm cos w style
exec "ruby jakis skrypt w rubym"

no ale jest tez eval ktory zacytuje dokumentacje robi :stuck_out_tongue:
“eval (…) public
Evaluates the Ruby expression(s) in string. If binding is given, the evaluation is performed in its context. The binding may be a Binding object or a Proc object. If the optional filename and lineno parameters are present, they will be used when reporting syntax errors”

jak i pewnie wiele innych sposobow

Hehe
wyprzedziłeś mnie ;]

Dzięki! :smiley:
Wiem, że niezalecane, ale dalej uczę się na tym irc bocie. ^^
A eval to jedynie dodatek, bym mógł bezpośrednio kod pisać do wykonania.
A exec też wypróbuję.
Jeszcze raz, dziękuję. :wink:

no exec to exec taki system z php. Tez sie przydaje przy takim rodzaju programowania jak robisz. A jak juz mowilem apidock!

Ehh… żeby nie zakładać nowego tematu, napiszę tutaj.
Zastosowałem eval w bocie:

when /^:(.+?)!(.+?)@(.+?)\sPRIVMSG\s(.+)\s:#eval\s(.*)$/i puts "[ EVAL ]" eval ($5)
I wyrzuca mi błędy:

Insecure operation - eval bot.rb:173:in `eval' bot.rb:173:in `handle_server_input' bot.rb:192:in `block in main_loop' bot.rb:184:in `each' bot.rb:184:in `main_loop' bot.rb:205:in `<main>'
Wydaje mi się, że eval użyłem prawidłowo, bo gdy napisałem prosty program - działał.
A to nie działa. I nie wiem dlaczego.

“Insecure Operation” – wypluwa, jak sugeruje nazwa, przy próbie wywołania niekoniecznie-przewidzianego kodu zawartego w stringu pochodzącym z “podejrzanego” źródła (np. tekst wprowadzony przez usera).

Dalsza lektura: taint, untaint, tainted strings, tainted strings and eval

Ok. Dzięki. :wink:

Dodam, że warto jeszcze poczytać o zmiennej globalnej $SAFE.