<div dir="ltr"><div>Исследуя новый сериализатор в JSON::XS наткнулся:</div><br clear="all"><div><div><font face="monospace">$ echo 'use strict;</font></div><div><font face="monospace">use warnings;</font></div><div><font face="monospace">use feature "say";</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">use JSON::XS;</font></div><div><font face="monospace">my $j=JSON::XS->new->allow_tags;</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">say "JSON::XS: $JSON::XS::VERSION";</font></div><div><font face="monospace">say "Types::Serialiser: $Types::Serialiser::VERSION";</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">my $t = $j->encode( Foo->new );</font></div><div><font face="monospace">say $t;</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">my @t = $j->encode( Foo->new );</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">package Foo;</font></div><div><font face="monospace">sub new { bless {}, $_[0]; }</font></div><div><font face="monospace">sub FREEZE { ( 123, 456 ); }' | perl</font></div><div><font face="monospace"><b>JSON::XS: 3.01</b></font></div><div><font face="monospace"><b>Types::Serialiser: 1.0</b></font></div><div><font face="monospace"><b>("Foo")[123,456]</b></font></div><div><font face="monospace"><b>panic: attempt to copy freed scalar c37a18 to c37a00 at - line 14.</b></font></div><div><br></div><div><div><font face="monospace">$ perl -MJSON::XS -wE 'say JSON::XS->new->allow_tags->encode( bless {}, Foo ); package Foo; sub FREEZE{ return 123 }'<br></font></div><div><font face="monospace"><b>Use of uninitialized value in say at -e line 1.</b></font></div><div><font face="monospace"><b>("Foo")[123]</b></font></div></div><div><br></div><div><div><div><font face="monospace">$ perl -MJSON::XS -wE 'say scalar( JSON::XS->new->allow_tags->encode( bless {}, Foo )); package Foo; sub FREEZE{ return 123 }'<br></font></div><div><font face="monospace"><b>("Foo")[123]</b></font></div></div></div><div><br></div><div>Проверили на разных машинах и на разных версиях perl-а - одно и то же.</div><div><br></div><div>-- <br></div></div><div class="gmail_signature"><div dir="ltr"><div>  С уважением,<br></div><div>  Вадим Власов</div><div>  т.: +7 (916) 424-00-72</div></div></div>
</div>