Valores de retorno implícitos em Ruby

Eu sou um pouco novo para Ruby e, embora eu ache que é uma linguagem muito intuitiva, estou tendo alguma dificuldade em entender como os valores de retorno implícitos se comportam.

Eu estou trabalhando em um pequeno programa para grep logs do Tomcat e gerar arquivos CSV delimitados por pipe a partir dos dados pertinentes. Aqui está um exemplo simplificado que estou usando para gerar as linhas de uma entrada de log.

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*?)\]/)

Quando executo esse código, recebo o seguinte, que é o esperado quando se retorna explicitamente o valor da saída.

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

No entanto, se eu alterar o LineMatcher para o seguinte e não retornar explicitamente a saída:

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

Então eu recebo o seguinte resultado:

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

Obviamente, este não é o resultado desejado. Parece que eu deveria ser capaz de me livrar da variável de saída, mas não está claro de onde o valor de retorno está vindo. Além disso, quaisquer outras sugestões / melhorias para a legibilidade são bem-vindas.

questionAnswers(2)

yourAnswerToTheQuestion