in reply to Parse Email Header

It is hard to tell what
@{$message->{headers}}
contains because you did not enclose the output in <code/> tags.

In particular, it is not clear that the "From:" line starts at a newline boundary.

If it does, the correct way to capture the content is:

my ($from_address) = grep /^From:\s/i, @{$message->{headers}}; #^ ^ Parens added to create list context, to get CONTEN +T rather than COUNT
It would also help if you identified what variable was dumped using Data::Dumper, and had that formatted better , using <code> tags.

        "I can cast out either one of your demons, but not both of them." -- the XORcist