Niejawne wartości zwracane w Ruby

Jestem trochę nowy w Rubim i chociaż uważam, że jest to bardzo intuicyjny język, mam pewne trudności ze zrozumieniem, jak zachowują się niejawne wartości zwrotne.

Pracuję nad małym programem do logów grep Tomcat i generuję pliki CSV rozdzielone rurami z odpowiednich danych. Oto uproszczony przykład, którego używam do generowania wierszy z wpisu dziennika.

class LineMatcher
  class << self
    def match(line, regex)
      output = ""
      line.scan(regex).each do |matched|
        output << matched.join("|") << "\n"
      end
      return output
    end        
  end
end


puts LineMatcher.match("00:00:13,207 06/18 INFO  stateLogger - TerminationRequest[accountId=AccountId@66679198[accountNumber=0951714636005,srNumber=20]",
                       /^(\d{2}:\d{2}:\d{2},\d{3}).*?(\d{2}\/\d{2}).*?\[accountNumber=(\d*?),srNumber=(\d*?)\]/)

Po uruchomieniu tego kodu otrzymuję następujące informacje, co jest oczekiwane podczas jawnego zwracania wartości wyniku.

00:00:13,207|06/18|0951714636005|20

Jeśli jednak zmienię LineMatcher na następujący i nie jawnie zwrócę dane wyjściowe:

    class LineMatcher
      class << self
        def match(line, regex)
          output = ""
          line.scan(regex).each do |matched|
            output << matched.join("|") << "\n"
          end
        end        
      end
    end

Wtedy otrzymuję następujący wynik:

00:00:13,207
06/18
0951714636005
20

Oczywiście nie jest to pożądany rezultat. Wydaje mi się, że powinienem być w stanie pozbyć się zmiennej wyjściowej, ale nie jest jasne, skąd pochodzi wartość zwracana. Również wszelkie inne sugestie / ulepszenia dotyczące czytelności są mile widziane.

questionAnswers(2)

yourAnswerToTheQuestion