<div dir="ltr">Hey Hugues,<div><br></div><div>both of them are scalar context, but in the first you wanna place a hash to the scalar variable that is why you have the error, and in the second you assign a hash reference to the scalar, which is ok, because the reference is a scalar.</div>
<div><br></div><div>This is a hash:</div><div><div><br></div><div>%hash1 = (</div><div>        key1 => 'value1',</div><div>        key2 => 'value2',</div><div>        key3 => 'value3',</div>
<div>    );</div></div><div><br></div><div>You cannot store a hash in a scalar, but you can store the reference to the hash in a scalar:</div><div><br></div><div>my $hash_ref1 = \%hash;<br><div><span style="color:rgb(51,51,51);font-family:Arial,Verdana,Geneva,Helvetica,sans-serif;font-size:12px"><br>
</span></div><div><span style="color:rgb(51,51,51);font-family:Arial,Verdana,Geneva,Helvetica,sans-serif">But you don't wanna deal with a hash name because you would use it only once to create the hash, so you skip this step and create an anonymous hash, and place the reference to a scalar in one step:</span></div>
<div><span style="color:rgb(51,51,51);font-family:Arial,Verdana,Geneva,Helvetica,sans-serif;font-size:12px"><br></span></div><div><span style="color:rgb(51,51,51);font-family:Arial,Verdana,Geneva,Helvetica,sans-serif;font-size:12px">my $hash_ref2 = </span>  {</div>
<div>        key1 => 'value1',</div><div>        key2 => 'value2',</div><div>        key3 => 'value3',</div><div>    };</div><div><div><br></div><div>You can read more about it in the Intermediate Perl book from <span style="color:rgb(51,51,51);font-family:Arial,Verdana,Geneva,Helvetica,sans-serif;font-size:12px">O'Reilly. </span></div>
</div><div><span style="color:rgb(51,51,51);font-family:Arial,Verdana,Geneva,Helvetica,sans-serif;font-size:12px"><br></span></div></div><div><span style="color:rgb(51,51,51);font-family:Arial,Verdana,Geneva,Helvetica,sans-serif;font-size:12px">Best regards,</span></div>
<div><span style="color:rgb(51,51,51);font-family:Arial,Verdana,Geneva,Helvetica,sans-serif;font-size:12px">Attila</span></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Apr 22, 2014 at 5:31 PM, Hugues <span dir="ltr"><<a href="mailto:hugues@max4mail.com" target="_blank">hugues@max4mail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thanks for your help<br>
if I understand well<br>
<br>
$Stock->{$NumP} = ( $Num =>  { Code    => $parc->{Code} .... )  is scalar context, and generate a error<br>
$Stock->{$NumP} = { $Num =>  { Code    => $parc->{Code} .... } is correct.<br>
<br>
I will add "use diagnostics;" in my code<br>
thanks<br>
Hugues<br>
<br>
Le 22/04/2014 17:18, Maxwell Carey a écrit :<div class="HOEnZb"><div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 04/22/2014 08:21 AM, Hugues wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
$Stock->{$NumP} = ( $Num =>  { Code    => $parc->{Code},<br>
NumP => $parc->{NumP},<br>
NumS => $parc->{NumS},<br>
NumC => $parc->{NumC}<br>
                                                            } );<br>
</blockquote>
<br>
Not related to Dancer, just plain Perl. You're assigning a list to a scalar, which is probably not what you intend. What you're doing is the same as:<br>
<br>
    my $foo = ( "foo", "bar" );<br>
<br>
which sets the value of $foo to "bar". If you turn on diagnostics with `use diagnostics;`, you can get a nice explanation of the warning:<br>
<br>
    Another common error is to use ordinary parentheses to construct a list<br>
    reference when you should be using square or curly brackets, for<br>
    example, if you say<br>
<br>
        $array = (1,2);<br>
<br>
    when you should have said<br>
<br>
        $array = [1,2];<br>
<br>
    The square brackets explicitly turn a list value into a scalar value,<br>
    while parentheses do not.  So when a parenthesized list is evaluated in<br>
    a scalar context, the comma is treated like C's comma operator, which<br>
    throws away the left argument, which is not what you want. See<br>
    perlref for more on this.<br>
<br>
To fix, change the parentheses to curly braces to create an anonymous hash:<br>
<br>
    $Stock->{$NumP} = { $Num =>  { Code    => $parc->{Code},<br>
NumP => $parc->{NumP},<br>
NumS => $parc->{NumS},<br>
NumC => $parc->{NumC}<br>
                                                            } };<br>
<br>
Or simply remove the additional level of hash nesting (which is essentially what is happening in your current program):<br>
<br>
    $Stock->{$NumP} = { Code    => $parc->{Code},<br>
                                          NumP => $parc->{NumP},<br>
                                          NumS => $parc->{NumS},<br>
                                          NumC => $parc->{NumC}<br>
                                       };<br>
______________________________<u></u>_________________<br>
dancer-users mailing list<br>
<a href="mailto:dancer-users@dancer.pm" target="_blank">dancer-users@dancer.pm</a><br>
<a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" target="_blank">http://lists.preshweb.co.uk/<u></u>mailman/listinfo/dancer-users</a><br>
</blockquote>
<br>
______________________________<u></u>_________________<br>
dancer-users mailing list<br>
<a href="mailto:dancer-users@dancer.pm" target="_blank">dancer-users@dancer.pm</a><br>
<a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" target="_blank">http://lists.preshweb.co.uk/<u></u>mailman/listinfo/dancer-users</a><br>
</div></div></blockquote></div><br></div>