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
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
“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!
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ę.
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.
Dodam, że warto jeszcze poczytać o zmiennej globalnej $SAFE.