http://www.perlmonks.org?node_id=589860


in reply to Re: Forcing to anonymous array in XML::simple
in thread Forcing to anonymous array in XML::simple

Thank you.
I have one more question. I tested more pairs in the hash and the option noattr=>1 (that I realized I need to use). When I run:
use strict; use warnings; use XML::Simple;use Data::Dumper; my $file = './test.xml'; my %tmp = ( A => [ [1] ], B => 1); XMLout(\%tmp,outputfile=>$file,noattr=>1); %tmp = %{XMLin($file,forcearray=>['A'],noattr=>1)}; warn Dumper(\%tmp); %tmp = %{XMLin($file,forcearray=>1,noattr=>1)}; warn Dumper(\%tmp);
I get:
$VAR1 = { 'A' => [ { 'anon' => '1' } ], 'B' => '1' }; $VAR1 = { 'A' => [ [ '1' ] ], 'B' => [ '1' ] };
is it correct that I cannot get A value as array and B value as scalar ?, i.e.:
$VAR1 = { 'A' => [ [ '1' ] ], 'B' => '1' };

Replies are listed 'Best First'.
Re^3: Forcing to anonymous array in XML::simple
by grep (Monsignor) on Dec 14, 2006 at 18:03 UTC
    Yes, B will also be forced into a 1 element array (with ForceArray => 1). But IMO that is the way it should be. It's consistant.

    grep
    1)Gain XP 2)??? 3)Profit

      Thanks. I'm trying to cope in a general way with these situations:
      use strict; use warnings; use XML::Simple;use Data::Dumper; my $file = './test.xml'; my $a = ['x','y']; my $a1 = [$a]; my %tmp = ( A =>$a1, B => 'z'); XMLout(\%tmp,outputfile=>$file,noattr=>1); %tmp = %{XMLin($file,forcearray=>['A'],noattr=>1)}; print "----------\n"; print $tmp{B}."\n"; print $tmp{A}[0]->[0]."\n"; $a = ['x']; $a1 = [$a]; %tmp = ( A =>$a1, B => 'z'); XMLout(\%tmp,outputfile=>$file,noattr=>1); %tmp = %{XMLin($file,forcearray=>1,noattr=>1)}; print "----------\n"; print $tmp{B}."\n"; print $tmp{A}[0]->[0]."\n"; $a = ['x']; $a1 = [$a]; %tmp = ( A =>$a1, B => 'z'); XMLout(\%tmp,outputfile=>$file,noattr=>1); %tmp = %{XMLin($file,forcearray=>['A'],noattr=>1)}; print "----------\n"; print $tmp{B}."\n"; print $tmp{A}[0]->[0]."\n";
      That outputs:
      ---------- z x ---------- ARRAY(0x653930) x ---------- z Not an ARRAY reference at tmp1.pl line 31.
      I can only think of evaluating ref($tmp{A}) and ref($tmp{B}) to decide how to operate, since in my code $tmp{A} is an array reference to an array that can have a single element made by an array reference to a single-element array itself, and $tmp{B} is instead a scalar. I guess I'm missing something...