1) Немного не понял, как вы проверяете существует ли такой файл если еще не объявили его?
file_name = ARGV[0]
# Проверяем, существует ли файл, и что имя файла передали в ARGV[0]
if file_name != nil && File.exist?(file_name)
puts "Последние 5 строк файла: " + file_name
# Открываем файл для чтения
f = File.new(file_name, "r:UTF-8")
То есть сначала вы получается проверили а потом задали переменную с файлом? Честно говоря не понял как.
2) И такой вопрос, можно ли задать имя файла через метод gets
Например
puts "Введите имя файла"
file_name = STDIN.gets.to_s
и потом проверить также как и вы проверяли?
Вот в этом условии
if file_name != nil && File.exist?(file_name)
Мы проверяем что переменная не пустая И что файл с таким именем существует. File.exist?
принимает в качестве параметра строку имя файла. А эту строку мы взяли из ARGV
строчкой ранее.
Через метод gets
можно сохранить любую введенную пользователем строку, а потом использовать ее как угодно, в том числе как имя файла.
НО! важно помнить, что пользователь может ввести что угодно и все введенные внешние данные надо проверять на допустимые значения. Пока об этом не стоит беспокоиться, но на будущее стоит иметь в виду.