Если трассировка стека пуста, мы можем начать выполнение вправо и влево. Я не знаю, используется ли это условно или нетрадиционно, так как я нахожусь в Ruby около недели.
if caller.length == 0
# do stuff
end
Подтверждение концепции:
файл: test.rb
#!/usr/bin/ruby
if caller.length == 0
puts "Main script"
end
puts "Test"
файл: shmest.rb
#!/usr/bin/ruby -I .
require 'test.rb'
puts "Shmest"
Использование:
$ ./shmest.rb
Test
Shmest
$ ./test.rb
Main script
Test