#!/usr/bin/perl

use 5.005003;
use strict;

print STDERR "The pwhich bundled with File-Which is deprecated\n";
print STDERR "It will be removed from File-Which, but not before April 30, 2015\n";
print STDERR "Please install App::pwhich instead\n";

exit App::pwhich::main(@ARGV);

package
  App::pwhich;

use strict;
use File::Which ();
use Getopt::Std ();

use vars qw{$VERSION};
BEGIN {
  $VERSION = '1.16';
}

sub main
{
  local @ARGV = @_;
  
  # Handle options
  my %opts = ();
  Getopt::Std::getopts('av', \%opts);
  
  if ( $opts{v} ) {
    print <<"END_TEXT";
This is pwhich running File::Which version $File::Which::VERSION

Copyright 2002 Per Einar Ellefsen.

Some parts copyright 2009 Adam Kennedy.

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

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

END_TEXT
    return 1;
  }
  
  foreach my $file ( @ARGV ) {
    my @result = $opts{a}
      ? File::Which::which($file)
      # Need to force scalar
      : scalar File::Which::which($file);
    
    # We might end up with @result = (undef) -> 1 elem
    @result = () unless defined $result[0];
    foreach my $result ( @result ) {
      print "$result\n" if $result;
    }
    
    unless ( @result ) {
      print STDERR "pwhich: no $file in PATH\n";
      return 1;
    }
  }
  
  return 0;
}

__END__

=pod

=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

The pwhich bundled with File-Which is deprecated
It will be removed from File-Which, but not before April 30, 2015
Please install L<App::pwhich> instead

`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 usually Unix
tool `which', and tries to emulate its functionality, but is written
purely in Perl (uses the module C<File::Which>), so is portable.

=head2 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 L<File::Which>) and copyright notice and exits.

=back

=head1 SUPPORT

Bugs should be reported via the GitHub issue tracker

L<https://github.com/plicease/File-Which/issues>

For other issues, contact the maintainer.

=head1 SEE ALSO

=over 4

=item L<File::Which>

Perl API for L<pwhich>

=item L<App::pwhich>

Guts of this script.

=iten L<IPC::Cmd>

Comes with a C<can_run> function with slightly different semantics that
the traditional UNIX where.  It will find executables in the current
directory, even though the current directory is not searched for by
default on Unix.

=item L<Devel::CheckBin>

This module purports to "check that a command is available", but does not
provide any documentation on how you might use it.

=back

=head1 AUTHOR

Adam Kennedy E<lt>adamk@cpan.orgE<gt>

Per Einar Ellefsen E<lt>pereinar@cpan.orgE<gt>

Originated in F<modperl-2.0/lib/Apache/Build.pm>. Changed for use in DocSet
(for the mod_perl site) and Win32-awareness by me, with slight modifications
by Stas Bekman, then extracted to create C<File::Which>.

Version 0.04 had some significant platform-related changes, taken from
the Perl Power Tools C<`which'> implementation by Abigail with
enhancements from Peter Prymmer. See
L<http://www.perl.com/language/ppt/src/which/index.html> for more
information.

=head1 COPYRIGHT

Copyright 2002 Per Einar Ellefsen.

Some parts copyright 2009 Adam Kennedy.

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

=cut
