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,
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.