# Lettura da file, mi aiutate a capire?

**URL:** <https://www.ruby-forum.com/t/lettura-da-file-mi-aiutate-a-capire/156946>\
**Category:** IT\
**Created:** [January 5, 2009, 5:17pm UTC](https://www.ruby-forum.com/t/lettura-da-file-mi-aiutate-a-capire/156946 "2009-01-05T17:17:13Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![cozzaamara](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/3e96dc/32.png) [@cozzaamara](https://www.ruby-forum.com/u/cozzaamara)\
**Post date:** [January 5, 2009, 5:17pm UTC](https://www.ruby-forum.com/t/lettura-da-file-mi-aiutate-a-capire/156946/1 "2009-01-05T17:17:13Z")

</div>

Ciao a tutti, ho da poco iniziato a studiare Ruby e facendo vari test mi  
sono imbattutto in qualcosa che non ho ancora perfettamente afferratto.

Questo blocco di codice funziona correttamente:

```auto
File.open @file, 'r' do |f|
  while line = f.gets
    puts line
  end
end
```

Mentre se lo “inglobo” all’interno di un metodo

```auto
def leggi
  File.open @file, 'r' do |f|
    while line = f.gets
  STDOUT.puts line
    end
   end
end
```

sono appunto obbligato a mettere STDOUT oppure $stdout prima di puts  
altrimenti ricevo un errore.  
(Uninitialized Strem IOError)

PerchÃ¨ solo “puts line” come nel primo caso non va bene.

Si tratta sicuramente di “questione di ambito” ma non ho capito bene il  
funzionamento.

Grazie mille.
