Hope there is one solution O.K. for you.

 >>>>> Code >>>>>

mylines = <<EOT
A......1
M.....
d....
A....1
r....
f....
A.....1
c....
t....
Z.....
EOT
puts '########## Without last Z-Record ##########'
mylines.scan(/^A.*?(?=^(?:A|Z))/m){|a|puts "#{a}\n----------"}
puts '########## Last Record up to EOF ##########'
mylines.scan(/^A.*?(?=^A|\Z)/m){|a|puts "#{a}\n----------"}
puts '########## Includings last Z-Record ##########'
mylines.scan(/^A.*?(?:(?=^A)|^Z.*$)/m){|a|puts "#{a}\n----------"}

 >>>>> Results >>>>>

########## Without last Z-Record ##########
A......1
M.....
d....

----------
A....1
r....
f....

----------
A.....1
c....
t....

----------
########## Last Record up to EOF ##########
A......1
M.....
d....

----------
A....1
r....
f....

----------
A.....1
c....
t....
Z.....
----------
########## Includings last Z-Record ##########
A......1
M.....
d....

----------
A....1
r....
f....

----------
A.....1
c....
t....
Z.....

----------

 >>>>> End >>>>>

Wolfgang NĂ¡dasi-Donner