On Wed, Jul 16, 2003 at 07:50:56AM -0700, Stuart White wrote:
> I seem to be stuck on subroutines.

Okay, let's have a look;

> #################################
> # Subroutine prototypes
> ################################
> 
> sub FoulParser($);
> 
> #############################
> # Main Program
> #############################
> 
> #!/usr/bin/perl
> 
> use warnings;
> use strict;
>  
> open(STATS, "stats.txt") or die "statfile\n";
> my $foul; 
>   while (<STATS>)
>  {
>       #if ($_ = /(\w+) (Foul:) (\w+)/)
>       if ($_ =~ /Foul/)
>       {
>        $foul = "$_";
>        FoulParser($foul);
>       }
>  }    

This is beside the point, but:

    open (STATS, "stats.txt") 
      or die "open: stats.txt: $!";  # better error message

    while (<STATS>) {
        next unless /Foul/;          # use $_ to your advantage
        FoulParser($_);              # and pass it directly to the sub
    }

> 
> 
> ############################
> # Subroutine Definitions
> ###########################
>  
> #This subroutine takes a scalar $foul, that is a 
> #parsed line from the file, a line that contains the 
> #word "Foul" and it prints out that line.
> 
> 
> sub FoulParser($foul)
                 ^^^^^

This doesn't do what you think it does.  Perl doesn't (yet) have named
prototypes, and trying to use one should have given you a warning.

The variable $foul you use here:

> { 
>  print "$foul\n";
> }

Is the one you declared near the top of the file.  The subroutine should
look more like:

  sub foul_parser ($) {
      my $foul = shift;
      print "$foul\n";
  }

The arguments are passed in the @_ array, and shift() will give you the
first element of that array.

And the same sort of set-up will also fix your other subs.

  sub foo ($$) {
      my ($first, $second) = @_;
  }

-- 
Steve

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to