PerlerのRuby日記

Rubyとか

AWS Lambda Ruby 2.7 の puts の返却値は nil ではなく文字数

メモ。

AWS Lambda でランタイムに Ruby 2.7 を選択する。そのとき puts を使うと返却値は nil ではなくて、出力した文字数が返る。

AWS Lambda

# lambda_handler.rb
require 'json'

def lambda_handler(event:, context:)
  ret_puts = puts "foo!!!!!"
  puts "ret_puts: #{ret_puts.inspect}" #=> 8 ("foo!!!!!".length)

  { statusCode: 200, body: JSON.generate('Hello from Lambda!') }
end

ローカルで irb したとき

2.7.1 :001 > ret_puts = puts "foo!!!!!"
foo!!!!!
2.7.1 :002 > puts "ret_puts: #{ret_puts.inspect}"
ret_puts: nil
 => nil


ちなみに、ランタイムに Ruby 2.5 を選択すると、puts は nil が返る。

参考:
docs.ruby-lang.org