#!/usr/bin/perl -w

use strict;

use File::Which;
use Getopt::Std;

my %opts = ();

getopts('av', \%opts);

my @files = @ARGV;

if ($opts{v}) {
    print <<"END";
This is pwhich running File::Which version $File::Which::VERSION

Copyright 2002 Per Einar Ellefsen.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
END

    exit;
}

unless(@files) {
    print <<"EOS";
Usage: $0 [-a] [-v] programname [programname ...]
      -a        Print all matches in PATH, not just the first.
      -v        Prints version and exits

EOS
          
    exit;
}

for my $file (@files) {
    my @result = $opts{a} ? which($file) : scalar which($file); # need to force scalar
    @result = () unless defined $result[0];   # we might end up with @result = (undef) -> 1 elem
    for my $result (@result) {
        print "$result\n" if $result;
    }
    print STDERR "pwhich: no $file in PATH\n" unless @result;
}

__END__

=head1 NAME

pwhich - Perl-only `which'

=head1 Synopsis

  $ pwhich perl
  $ pwhich -a perl          # print all matches
  $ pwhich perl perldoc ... # look for multiple programs
  $ pwhich -a perl perldoc ...

=head1 DESCRIPTION

`pwhich' is a command-line utility program for finding paths to other
programs based on the user's C<PATH>. It is similar to the usualy Unix
tool `which', and tries to emulate its functionality, but is written
purely in Perl (uses the module C<File::Which>), so is portable.


=head1 Calling syntax

  $ pwhich [-a] [-v] programname [programname ...]

=head2 Options

=over

=item -a

The option I<-a> will make C<pwhich> print all matches found in the
C<PATH> variable instead of just the first one. Each match is printed
on a separate line.

=item -v

Prints version (of C<File::Which>) and copyright notice and exits.

=back

=head1 License

This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=head1 See Also

L<perl>, L<File::Which>, L<which(1)>

=head1 Author

Per Einar Ellefsen, E<lt>per.einar (at) skynet.beE<gt>

=cut

