Irb je možno vyvolat i z běžícího kódu. Na začátek skriptu vložíme
require 'irb'
na místě v kódu, kde chceme vyvolat interaktivní sezení s irb vložímě příkaz
IRB::start $STDIN
chceme-li, aby po ukončení interaktivního sezení pokračovalo vykonávání programu ukončujeme irb příkazem quit
Dalším způsobem zaručení návratu do programu je ošetřit událost SystemExit, například takto
require 'irb'
puts "Before IRB"
begin
IRB::start $STDIN
rescue SystemExit
end
puts "Okie donkey"
Takto spuštěný irb (irb) má ovšem omezené možnosti. Chceme-li zkoumat a měnit obsahy proměnných, musíme to udělat trochu jinak. Především budeme muset zasáhnout do modulu irb a dodefinovat si metodu start2 výsledný ukázkový příklad vypadá takto:
Příklad A.1. Start irb z programu
# $Id: invoke-irb.ses,v 1.1 2002/12/16 20:34:12 radek Exp $sh: line 3: ./invoke-irb.rb: nenĂ souborem ani adresĂĄĹemsh: line 4: p: command not foundsh: line 5: a: command not foundsh: line 6: quit: command not found
Jednoduchá interakce s tímto programem pak může být třeba:
# $Id: invoke-irb.ses,v 1.1 2002/12/16 20:34:12 radek Exp $sh: line 3: ./invoke-irb.rb: nenĂ souborem ani adresĂĄĹemsh: line 4: p: command not foundsh: line 5: a: command not foundsh: line 6: quit: command not found
Nobu Nakada mi poslal tento kousek kódu
require 'irb'
IRB.setup(nil)
irb = IRB::Irb.new(IRB::WorkSpace.new(binding))
IRB.conf[:MAIN_CONTEXT] = irb.context
a = 10
begin
raise "#{a} left" if (a -= 1) > 0
rescue StandardError, ScriptError
puts $!.to_s
trap("SIGINT") {irb.signal_handle}
catch(:IRB_EXIT) {irb.eval_input} or retry
end