in reply to Perl reference array

The problem is that the items between two ,, are not taken into the index of the created array :
$arr= [ [1,2,3,4,5,6,7,8,9 ], #works as expected [1,2,3,'',5,6,7,'',9 ], #works as expected [1,2,3, ,5,6,7, ,9 ], #does not work as expected "empty fields " + are ignored ]; my $dd=Data::Dumper->new([$arr],[ qw(arr) ] )->Indent(1)->Quotekeys(0) +->Dump; print $dd; $arr = [ [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ], [ 1, 2, 3, '', 5, 6, 7, '', 9 ], [ 1, 2, 3, 5, 6, 7, 9 ] ];

as you can see from the dump in the last record there are less fields then I mentioned in the definition of $arr. When I quote the "emty fields" everything is OK. however when I just use a sequence of , , or ,, the index of the array is not updated. Hence the less fields in the last record. Should expect that all records have the same number of indexes, which is not the case.

Is there a way that the "empty fields" , as i call them can be initialized to undef. In my opinion this should be the case.

Thanks in advance Greeting ,

Replies are listed 'Best First'.
Re^2: Perl reference array
by LanX (Saint) on Mar 28, 2015 at 21:38 UTC
    > Is there a way that the "empty fields" , as i call them can be initialized to undef.

    no, as I told you "it has to be explicitly inserted".

    [1,2,3, undef, 5,6,7, undef ,9 ]

    the only way to facilitate things is to define your own input string syntax:

    Like a sub row() which returns the above from a "simplified" list row(qw(1 2 3 . 5 6 7 . 9))

    Or alternatively to parse() a multiline-string representing a matrix, like

    $AoA = parse <<'__matrix__'; 1 2 3 4 5 6 7 8 9 1 2 3 . 5 6 7 . 9 1 2 3 . 5 6 7 . 9 __matrix__

    YMMV according to your real problem.

    > In my opinion this should be the case.

    It's a feature of Perl, other stuff would break in this "case", sorry!

    Cheers Rolf
    (addicted to the Perl Programming Language and ☆☆☆☆ :)

    PS: Je suis Charlie!

      Ok rolf

      Thanks for the quick answer. It seems that i have to workaround this myself. There is no perl "build in " feature to solve this. I was just wondering ...

      greetings.
        > There is no perl "build in " feature to solve this.

        Not that I'm aware of in Perl's syntax.

        Perl is very flexible in parsing, combining regex and split is powerful.

        Or suing map to translate lists.

        But without knowing your task/grammar it's speculative coding (like do your fields allow only integers or strings with whitespace?)

        There might be some core modules allowing input formats supporting this somehow.

        Maybe YAML or JSON ... (?)

        CSV should, but isn't core.

        Cheers Rolf
        (addicted to the Perl Programming Language and ☆☆☆☆ :)

        PS: Je suis Charlie!