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

Much closer, I've written the following code, albeit also not working, with the same intent. The issue here is that, see OUT example below, only the first line of <PERSON> is read; instead of line1 from <PERSON>, then line1 from <MGR>, then line2 from <PERSON>, then line2 <MGR>, etc.

while (<PERSON>) { chomp; my $input1 = $_; while (<MGR>) { chomp; my $input2 = $_; print OUT $input1; print OUT "changetype: modify"; print OUT "replace: manager"; print OUT $input2, "\n"; } } exit;

Output from OUT

0479 changetype: modify replace: manager 4410 0479 changetype: modify replace: manager 8050 0479 changetype: modify replace: manager 0650 0479 changetype: modify replace: manager 7030 0479 changetype: modify replace: manager 9857 0479 changetype: modify replace: manager 4380

Replies are listed 'Best First'.
Re^9: Perl Builds an LDIF
by NetWallah (Canon) on Jun 18, 2010 at 00:56 UTC
    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

      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