#!/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. 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), so is portable. =head1 Calling syntax $ pwhich [-a] [-v] programname [programname ...] =head2 Options =over =item -a The option I<-a> will make C print all matches found in the C variable instead of just the first one. Each match is printed on a separate line. =item -v Prints version (of C) 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, L, L =head1 Author Per Einar Ellefsen, Eper.einar (at) skynet.beE =cut