in reply to Re^8: Perl Builds an LDIF
in thread Perl Builds an LDIF

You are, once again, nesting loops when you do not intend to.

For better control of loops, separate the "loop" part from "Read input" for "MGR":

while (defined my $input1=<PERSON>) { my $input2 = <MGR> or die "No corresponding MGR for $input1"; chomp $input1; # Are you sure you want to chomp ? If so, you probably need \n + when printing chomp $input2; print OUT $input1; print OUT "changetype: modify"; print OUT "replace: manager"; print OUT $input2, "\n"; }

     Syntactic sugar causes cancer of the semicolon.        --Alan Perlis

Replies are listed 'Best First'.
Re^10: Perl Builds an LDIF
by rfransix (Novice) on Jun 21, 2010 at 21:42 UTC

    Grateful for your guidance, I submit the following error based on your coding, please advise.

    Can't modify defined operator in scalar assignment at build4c22.pl line 12, near "<PERSON>) " Execution of build4c22.pl aborted due to compilation errors (#1) (F) You aren't allowed to assign to the item indicated, or otherwise try to change it, such as with an auto-increment. BEGIN not safe after errors--compilation aborted at c:/Perl/lib/Carp/Heavy.pm line 11. Compilation failed in require at c:/Perl/lib/Carp.pm line 33.

    #! perl use strict; use warnings; use diagnostics; open PERSON, "<", "ou3" or die "Cannot read 'ou3': $!"; open MGR, "<", "ou8" or die "Cannot read 'ou8': $!"; open OUT, ">", "buildAD.ldif" or die "Cannot write to 'buildAD.ldif': +$!"; truncate (OUT, 0); while (defined my $input1 = <PERSON>) { my $input2 = <MGR> or die "No file MGR for $input1"; chomp $input1; chomp $input2; print OUT $input1; print OUT "changetype: modify"; print OUT "replace: manager"; print OUT $input2, "\n"; } close PERSON; close MGR; close OUT; exit;
      Sorry - I did not verify the syntax. The correct code should read:
      while ( defined(my $input1 = <PERSON>) ) {

           Syntactic sugar causes cancer of the semicolon.        --Alan Perlis

        Perfect. That code does what we want. Here it is.

        #! perl use strict; use warnings; use diagnostics; open PERSON, "<", "ou3" or die "Cannot read 'ou3': $!"; open MGR, "<", "ou8" or die "Cannot read 'ou8': $!"; open OUT, ">", "buildAD.ldif" or die "Cannot write to 'buildAD.ldif': +$!"; truncate (OUT, 0); while (defined (my $input1 = <PERSON>)) { my $input2 = <MGR> or die "No file MGR for $input1"; chomp $input1; chomp $input2; print OUT $input1, "\n"; print OUT "changetype: modify", "\n"; print OUT "replace: manager", "\n"; print OUT $input2, "\n\n"; } close PERSON; close MGR; close OUT; exit;