There is a minor issue in your code that causes the results you are experiencing.
when you use:
name1 = File.readlines('first.txt').sample(1)
The return value is NOT NOT a string, but an array with 1 random pattern. i.e:
["Jhon"]
["Jhon"] print.
( ) , :
name1 = File.readlines('first.txt').sample(1)[0]
name2 = File.readlines('middle.txt').sample(1)[0]
name3 = File.readlines('last.txt').sample(1)[0]
name1 = File.readlines('first.txt').sample(1).pop
name2 = File.readlines('middle.txt').sample(1).pop
name3 = File.readlines('last.txt').sample(1).pop
, , , sample :
name1 = File.readlines('first.txt').sample
name2 = File.readlines('middle.txt').sample
name3 = File.readlines('last.txt').sample
, , , . :.
name1 = File.readlines('first.txt').sample(1).pop
name2 = File.readlines('middle.txt').sample(1).pop
name3 = File.readlines('last.txt').sample(1).pop
puts "#{name1} #{name2} #{name3}."
print "#{name1} #{name2} #{name3}."