Yes, actually $attached is a single string whether $code is true or false: in the latter case, it’s the empty string. And that means you get a key/value pair in which the string $attached is the key, and the value is undef — which gives the “Odd number of elements” warning.
The solution is to eval the string:
#! perl
use strict;
use warnings;
use Data::Dump;
my $body = 'Hello!';
my $code = 1;
my $email = 'addressee';
my $file_name = 'unknown';
my $from = 'sender';
my $name = 'A Nonny Mouse';
my $subject = 'Greeting';
my $attached = $code ? "attach_path => '$file_name', " .
"attach_filename => '$file_name', " .
"attach_type => 'application/txt'," : '';
my $success =
{
to => $email,
from => $from,
from_name => $name,
subject => $subject,
body => $body,
eval $attached,
};
dd $success;
Output:
2:21 >perl 1655_SoPW.pl
{
attach_filename => "unknown",
attach_path => "unknown",
attach_type => "application/txt",
body => "Hello!",
from => "sender",
from_name => "A Nonny Mouse",
subject => "Greeting",
to => "addressee",
}
2:21 >
Hope that helps,
|