From: "Eregon (Benoit Daloze) via ruby-core" Date: 2023-07-14T15:59:23+00:00 Subject: [ruby-core:114189] [Ruby master Bug#19726] Script loaded twice when requiring self Issue #19726 has been updated by Eregon (Benoit Daloze). mame (Yusuke Endoh) wrote in #note-7: > With the proposed workaround, `$LOADED_FEATRUES` will contain `"/path/to/bin/irb"` when the irb command is executed. Then `require "irb"` will not read `/path/to/lib/irb.rb`, instead return false immediately. Thus, this proposal will make irb and many other CLI tools inoperable. Unless I'm missing something, that would be no problem. Because `/path/to/bin` is not in `$LOAD_PATH` so it won't be considered for `require "irb"`, isn't it? ---------------------------------------- Bug #19726: Script loaded twice when requiring self https://bugs.ruby-lang.org/issues/19726#change-103876 * Author: johannes (Johannes Krude) * Status: Rejected * Priority: Normal * ruby -v: ruby 3.3.0preview1 (2023-05-12 master a1b01e7701) [x86_64-linux] * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN ---------------------------------------- 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 ``` -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/