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/