Anees wrote: > Dear friends: > > I am a perl begineer. I have created an script which prints each 100th > record from the file as shown below: > > #!/usr/bin/perl > $maxRecords=20000; > $steps=100; > > $index=1; > $recCounter=0; > while (<>){ > if(defined) { > if (($index % $steps) == 0) { > print $_; > $recCounter++; > } > if($recCounter > $maxRecords){ break; } > $index++; > } > } > > The above script works fine. But when I modify the script as follows: > > #!/usr/bin/perl > $maxRecords=20000; > $steps=100; > > $index=1; > $recCounter=0; > while (<> && defined){ > if (($index % $steps) == 0) { > print $_; > $recCounter++; > } > if($recCounter > $maxRecords){ break; } > $index++; > } > > I won't give me any records. > Can you please identify the difference in behavior ?
The special behaviour of while .. readline (assigning the record to $_ and then checking for definedness) only happens when the while condition contains just a single <> operator. If you make it more complicated than that then perl compiles exactly what you write, so while (<>) { .. } reads a record from the file, assigns it to $_, exits the loop if $_ is undefined, and then executes the body of the loop. It is the same as while (defined($_ = <>)) { .. } whereas while (<> && defined) { .. } reads a record from the file, discards it, exits the loop if $_ is undefined, and then executes the body of the loop, which is what you asked for :) HTH, Rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/