Project

General

Profile

Actions

Bug #19726

closed

Script loaded twice when requiring self

Added by johannes (Johannes Krude) over 1 year ago. Updated over 1 year ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 3.3.0preview1 (2023-05-12 master a1b01e7701) [x86_64-linux]
[ruby-core:113888]

Description

The executed program is not added to $LOADED_FEATURES unexpectedly resulting in the program possibly being loaded twice:

a.rb:

#!/usr/bin/env ruby

require "./b"

C = 42

return unless __FILE__ == $0

puts C

b.rb:

require "./a"

This results in:

$ ./a.rb 
./a.rb:5: warning: already initialized constant C
/home/johannes/t/a.rb:5: warning: previous definition of C was here
42

Ruby version:

$ sudo docker run ruby:3.3.0-preview1 ruby --version
ruby 3.3.0preview1 (2023-05-12 master a1b01e7701) [x86_64-linux]

This could be solved by always adding the executed program to $LOADED_FEATURES.

As a workaround, executed programs can be prepended with:

require "pathname"
if __FILE__ == $0
	$LOADED_FEATURES << Pathname.new(__FILE__).expand_path.to_s
end
Actions

Also available in: Atom PDF

Like1
Like0Like0Like0Like0Like0Like0Like0Like0