Patrick2003 has asked for the wisdom of the Perl Monks concerning the following question:

If anyone can help,that'll be super. I'm no expert to programming and new to Perl. I'm trying to do 2 main simple things. 1 - Count the rows of an input file and print the count, and 2 - print each row in sequence. It works when I run these 2 scripts separately, but not together as followed:
test(); sub test { $count = 0; $count++ while (<>); print "COUNT = $count"; while (<>) { chomp; print $_."\n"; } }

Replies are listed 'Best First'.
Re: while loop hanging
by no_slogan (Deacon) on Jan 31, 2003 at 18:30 UTC

    a) This has the look of homework.

    b) The second while loop is not hung, it is trying to read from standard input. The magic <> operator consumes @ARGV, you see.

Re: while loop hanging
by insensate (Hermit) on Jan 31, 2003 at 20:47 UTC
Re: while loop hanging
by Anonymous Monk on Jan 31, 2003 at 19:02 UTC
    $ cat yourfile | wc -l ; cat yourfile
    If you are on a win32 system get cygwin or gnu power tools.
Re: while loop hanging
by dbp (Pilgrim) on Jan 31, 2003 at 19:10 UTC
    Why don't you think about combining the loops into one. It seems to me that it would be pretty easy to increment your counter every time you print out a line...
      I thought about that, but I want the total count of rows at the very beginning of my output. Thanks
        OK, so combining this together with no_slogan's advise that the magic while(<>) consumes @ARGV, you need to store @ARGV before the first loop and restore it after the first loop is done.
        my @old_ARGV = @ARGV; my $count; $count++ while <>; print "COUNT = $count\n"; @ARGV = @old_ARGV; print while <>;

        And as you see, it's a bit pointless to first chomp off the newline if you add it later again in the print - so I removed that.

        You could make good use of local here as well, but I leave that as an exercise for the reader ... :)

        -- Hofmator