Project

General

Profile

Actions

Bug #3022

closed

What are $. and ARGF.lineno ?

Added by marcandre (Marc-Andre Lafortune) almost 14 years ago. Updated over 11 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 1.9.2dev (2010-03-03 trunk 26805) [x86_64-darwin10.2.0]
Backport:
[ruby-core:29048]

Description

=begin

  1. $. is not officially documented.

This makes it difficult to know if it works as expected or not...

The Ruby Prog Language (Flanagan & Matz) states:
"The number of the last line read from the current input file. Equivalent to ARGF.lineno."

This is not true in trunk, as demonstrated by:

$ rubydev -e "
ARGF.gets
File.open('/etc/passwd'){|f| f.gets; f.gets}
p $., ARGF.lineno
" /etc/hosts
2
1

What is the "current input file"? Not clear, but it's not thread local, as shown:

$ rubydev -e "
p $.
Thread.new{File.open('/etc/passwd').gets; p $. }.join;
p $.
"
0
1
1

  1. ARGF.lineno does not conform to its doc.

The doc states:

Returns the current line number of the current file in ARGF. This value
can be set manually with ARGF.lineno=.

Reading this, I would expect ARGF.lineno to be the same as ARGF.to_io.lineno.

That is not the case:

rubydev -e 'p "#{ARGF.lineno} #{ARGF.to_io.lineno}" while ARGF.gets' /etc/hosts /etc/passwd
"1 1"
"2 2"
...
"25 1"
"26 2"
...

  1. Maybe the best definition would be that $. returns the number of line read operations issued, from the last time an IO was read in the current thread?

  2. I suggest the documentation of ARGF.lineno be changed to:

Returns the current line number of ARGF as a whole. This value
can be set manually with ARGF.lineno=.

See also [ruby-core:26303]
=end


Related issues 1 (0 open1 closed)

Related to Backport191 - Bug #2020: ARGF.lineno and $. give inconsistent resultsClosed08/31/2009Actions
Actions #1

Updated by mame (Yusuke Endoh) almost 14 years ago

  • Assignee set to marcandre (Marc-Andre Lafortune)

=begin
Hi,

2010/3/27 Marc-Andre Lafortune :

This is not true in trunk, as demonstrated by:

$ rubydev -e "
ARGF.gets
File.open('/etc/passwd'){|f| f.gets; f.gets}
p $., ARGF.lineno
" /etc/hosts
2
1

This can be fixed easily, but I guess it will cause compatibility
issue. In fact, by the fix, rubyspec and make test-all reports
some errors. So I think we should consider the current behavior
as spec:

Returns the number of the last line read by Kernel#gets, IO#gets
or ARGF#gets. This variable has global scope, and can be assigned
an integer manually.

  1. I suggest the documentation of ARGF.lineno be changed to:

Returns the current line number of ARGF as a whole. This value
can be set manually with ARGF.lineno=.

Looks good. Could you commit it with the doc I wrote together?

--
Yusuke Endoh
=end

Actions #2

Updated by marcandre (Marc-Andre Lafortune) over 13 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
This issue was solved with changeset r28381.
Marc-Andre, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

=end

Actions #3

Updated by marcandre (Marc-Andre Lafortune) over 13 years ago

  • Status changed from Closed to Open

=begin
Writing "cf." in the commit log is not recognized correctly, but "cf", "c.f." or "c.f" are.

Since "cf." is the correct way to write it, could anyone with the right access fix it (Yugui?)

Thanks, and sorry for the noise

Marc-André

=end

Actions #4

Updated by mame (Yusuke Endoh) over 13 years ago

  • Assignee deleted (marcandre (Marc-Andre Lafortune))
  • Priority changed from Normal to 3
  • Target version changed from 1.9.2 to 2.0.0

=begin
Hi,

  1. $. is not officially documented.

As far as I know, rdoc does not support documents for built-in
variables. So there is no way to document them.

We should first add the feature to rdoc, or add a new document
about ruby's basic semantics. Contribution is welcome.

--
Yusuke Endoh
=end

Actions #5

Updated by naruse (Yui NARUSE) over 12 years ago

  • Status changed from Open to Assigned
  • Assignee set to drbrain (Eric Hodel)

Eric, how do we document $.?

Updated by steveklabnik (Steve Klabnik) over 12 years ago

Perl actually keeps a separate document to explain these variables, 'Perlvar' http://perldoc.perl.org/perlvar.html

Updated by drbrain (Eric Hodel) over 12 years ago

  • Category changed from core to doc

I will need to add support to RDoc for global variables, I don't have time to add the feature for 1.9.3.

ARGF.lineno is documented now.

Actions #8

Updated by zzak (zzak _) over 11 years ago

  • Status changed from Assigned to Closed

This issue was solved with changeset r37913.
Marc-Andre, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0