From: "JohanJosefsson (Johan Josefsson)" Date: 2022-08-05T20:02:15+00:00 Subject: [ruby-core:109427] [Ruby master Bug#18909] ARGF.readlines reads more than current file Issue #18909 has been updated by JohanJosefsson (Johan Josefsson). mame (Yusuke Endoh) wrote in #note-14: > Is this what you want? > > ``` > $ echo primo > a > $ echo secundo >> a > $ echo PRIMO > b > > $ ruby -i.bak -e 'until ARGF.closed?; x = ARGF.file.readlines; puts "#{ x.size } lines"; puts x; ARGF.skip; end' a b > > $ cat a > 2 lines > primo > secundo > > $ cat b > 1 lines > PRIMO > ``` > > TBH I don't recommend to use `-i` either Not really. I cannot understand that skip thing. I would expect the ARGF.file.readlines statement to remove the current file from ARGV since it is read. It is confusing. This is a thing even without -i option. It is a thing whenever we need to know what file we work on. Re #note-14: I guess it is a matter of taste but I really think -e hits a sweet spot. In the realm of sed/awk/grep -e is really a killer feature. ---------------------------------------- Bug #18909: ARGF.readlines reads more than current file https://bugs.ruby-lang.org/issues/18909#change-98582 * Author: JohanJosefsson (Johan Josefsson) * Status: Closed * Priority: Normal * ruby -v: ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu] * Backport: 2.7: REQUIRED, 3.0: REQUIRED, 3.1: REQUIRED ---------------------------------------- The docuentation says that ARGF.readlines: *Reads ARGF's current file in its entirety* , but this is what happens: `$ cat fileA A $ cat fileB B $ ruby -e 'puts ARGF.readlines' fileA fileB A B` i.e. it reads both the current file and the next one (all files?). -- https://bugs.ruby-lang.org/ Unsubscribe: