[ruby-core:109427] [Ruby master Bug#18909] ARGF.readlines reads more than current file
From:
"JohanJosefsson (Johan Josefsson)" <noreply@...>
Date:
2022-08-05 20:02:15 UTC
List:
ruby-core #109427
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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>