http://qs321.pair.com?node_id=1210253


in reply to Parsing ldap attributes into a csv

To access a hash key, use curly brackets, not parens. This fixes the errors:
foreach my $key (keys %data) { print "key=$key, value=$data{$key}\n"; $data{$key} =~ s/(^|$)/"/g if $data{$key} =~ /,/; }

Replies are listed 'Best First'.
Re^2: Parsing ldap attributes into a csv
by lvirden (Novice) on Mar 02, 2018 at 20:22 UTC
    Thank you for your advice - that helped a lot. After making that change, I now get the message:
    Use of uninitialized value in pattern match (m//) at ./ldap2csv.pl lin +e 58, <$in> chunk 7882.
    for the line
    $data{$key} =~ s/(^|$)/"/g if $data{$key} =~ /,/;
    I did some troubleshooting and find there is a key of "11" which has no value. That appears to be the result of the line
    $data{@header} = (); # To label the data.
    Originally the line was
    @data{@header} = (); # To label the data.
    and I didn't think that looked right. I tried changing the line back to that. There seems to still be issues but I will try to figure out why all my quoted values start with a comma. I appreciate your help. I wish this wasn't such a hard task.
      $data{@header} = ();  # To label the data.

      This expression evaluates the array  @header in scalar context. An array evaluated in scalar context yields the number of elements in the array.

      @data{@header} = ();  # To label the data.

      This expression is a slice. The elements of  @header are used as hash keys, to which values are assigned from the list on the RHS of the assignment. Since this list is empty in both statements, all the values assigned in both cases are undef.

      c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my %data; my @header = qw(fee fie foe fum); ;; $data{@header} = (); dd \%data; ;; @data{@header} = (); dd \%data; " { 4 => undef } { 4 => undef, fee => undef, fie => undef, foe => undef, fum => undef }


      Give a man a fish:  <%-{-{-{-<