--- /dev/null
+Revision history for File-Which
+
+1.27 2021-05-07 04:54:31 -0600
+ - Production release identical to 1.26_01
+
+1.26_01 2021-04-27 05:15:20 -0600
+ - Fix bug in test where test files sometimes didn't have
+ execute permissions (gh#31)
+ - Add Env as an explicit test prereq (gh#13, gh#32)
+
+1.25_01 2021-04-25 07:35:41 -0600
+ - Tests should now work when Perl isn't in the PATH (gh#29, gh#30)
+
+1.24 2021-03-19 05:50:14 -0600
+ - Documentation improvements
+ - Moved repository to new github org
+
+1.23 2018-12-31 14:28:16 -0500
+ - Internally use IS_WIN instead of IS_DOS for DOS/Windows style
+ operating systems. This is 2018 (almost 2019) after all.
+ IS_DOS is now an alias for IS_WIN, although these are not public
+ interfaces so you shouldn't be using them anyway.
+
+1.22 2017-09-08 14:08:59 -0400
+ - Support for MSYS2 ($^O eq 'msys')
+
+1.21 2016-03-02 14:20:43 -0500
+ - Workaround for nutty cygwin filesystem rules
+
+1.20 2016-03-01 15:06:54 -0500
+ - Fix bug where executable named "0" would not be found (gh#7)
+
+1.19 2015-07-21 09:23:54 -0400
+ - Relax required Perl back to 5.6.x as this module is upriver to
+ a large number of modules
+ - No non-core requirements back to 5.6.2
+
+1.18 2015-05-04 15:35:40 -0400
+ - Remove prototypes (gh#6)
+
+1.17 2015-05-01 07:06:00 -0400
+ - Removed pwhich as forwarned in 1.10
+ - Migrated to Dist::Zilla (relevant only for development)
+ - Minimum supported Perl is 5.8.1
+
+1.16 Sun 29 Mar 2015
+ - Remove use Test::Script from tests that escaped when this requirement
+ became optional.
+
+1.15 Sun 29 Mar 2015
+ - Fixed small but important POD error
+
+1.14 Sun 29 Mar 2015
+ - App::pwhich is no longer bundled with File::Which and included
+ in its own distribution.
+ - pwhich that comes with this distribution is deprecated, and will
+ report a warning if you try to use it, you should insted install
+ App::pwhich.
+ - pwhich that comes with this distribution will not be installed if
+ App::pwhich 1.14 or better is already installed.
+ - pwhich will be removed from this distribution, but not before
+ 30 April 2015.
+ - Make Test::Script an optional dependency
+
+1.12 Thu 26 Mar 2015
+ - Fixed bug in pwhich introduced in version 1.10 where only the
+ first file was searched for
+
+1.11 Thu 26 Mar 2015
+ - Support for relative and fully qualified paths in Unix (gh#2)
+
+1.10 Thu 26 Mar 2015
+ - Test::Script is now a test instead of runtime requirement
+ It will be entirely removed as a prerequisite in a subsequent
+ release
+ - Will now find .exe and .com files (as it should) on cygwin (rt83146)
+ - Declared required Perl version is now 5.005003
+ - Updated repository and maintainer information. Source for this
+ dist now lives on GitHub
+ - New module App::pwhich contains the guts of pwhich. It will be moved
+ into a separate dist in the near future. pwhich will be deprecated
+ and removed from this dist in the near future.
+
+1.09 Sun 27 Sep 2009
+ - Set svn:executable for the exe files so cygwin tests work
+
+1.08 Tue 15 Sep 2009
+ - Fixing pwhich
+ - Adding a proper test for it
+ - Adds a dependency on Test::Script 1.08
+
+1.07 Tue 28 Jul 2009
+ - CPAN Testers looks good for 1.06_01, moving to production release
+
+1.06_01 Sat 25 Jul 2009
+ - Taking over this hugely old and very popular module to clean it
+ up a bit.
+ - Moved from Test.pm to Test::More.
+ - Updated Changes
+ - Cleaned up some code a bit to make it more readable.
+ - Added an explicit minimum Perl version
+ - Changed platform detection code to constants for less code size
+ and compile-time if () optimisation.
+ - Removed non-leading tabs and other whitespace nigglies.
+
+0.05 Mon 24 Jun 2002
+ - Made sure the file wasn't a directory, as directories usually
+ have x set.
+ - made pwhich say so if it didn't find a file.
+ - improve file searching: file doesn't have to be -x on MacOS,
+ only -e. Same thing on DOSish, but only if the file extension is
+ in PATHEXT (so we don't look for non-executable files that
+ happen to be in PATH).
+ - For DOSish, VMS and Mac, add current directory in front of path,
+ as (on Win32) this one is searched first. (could someone tell me
+ if this assumption is true on VMS and MacOS too?)
+ - large updates to test suite: we now emulate executable files
+ inside t/test-bin/. Like this we have more control. I hope
+ this test suite will be better, but it is probably still
+ shaky. Any reports would do me a lot of good.
+
+0.04 Thu 20 Jun 2002
+ - Re-wrote some parts for more platform-specific code (Mac and VMS
+ primarily). Thanks to Abigail and the PPT `which':
+ http://www.perl.com/language/ppt/src/which/index.html
+ - Removed the '~' handling: was probably broken anyway.
+ - fixed a bug with pwhich -a where it would return the number of
+ results instead of the results
+
+0.03 Wed 24 Apr 2002
+ - Changed the '~' handling: last version was buggy, it needs to
+ only replace it on Unix and if $ENV{HOME} exists, replacing it
+ then with $ENV{HOME} (removes File::HomeDir dependency).
+ - Added documentation to pwhich (you can run perldoc on it now)
+
+0.02 Fri 19 Apr 2002
+ - Some documentation changes
+ - Added where($short_exec_name) as an alias for
+ which($short_exec_name, { all => 1 }).
+ [Request from Jerrad Pierce <belg4mit (at) mit.edu>]
+ - Added the which option --all. Other options just bloat everything.
+ - Added `pwhich', perl-only replacement for `which'.
+
+0.01 Sun 14 Apr 2002
+ - original version; extracted from DocSet. Only plain which() with
+ docs and tests.
--- /dev/null
+This is the Perl distribution File-Which.
+
+Installing File-Which is straightforward.
+
+## Installation with cpanm
+
+If you have cpanm, you only need one line:
+
+ % cpanm File::Which
+
+If it does not have permission to install modules to the current perl, cpanm
+will automatically set up and install to a local::lib in your home directory.
+See the local::lib documentation (https://metacpan.org/pod/local::lib) for
+details on enabling it in your environment.
+
+## Installing with the CPAN shell
+
+Alternatively, if your CPAN shell is set up, you should just be able to do:
+
+ % cpan File::Which
+
+## Manual installation
+
+As a last resort, you can manually install it. Download the tarball, untar it,
+install configure prerequisites (see below), then build it:
+
+ % perl Makefile.PL
+ % make && make test
+
+Then install it:
+
+ % make install
+
+On Windows platforms, you should use `dmake` or `nmake`, instead of `make`.
+
+If your perl is system-managed, you can create a local::lib in your home
+directory to install modules to. For details, see the local::lib documentation:
+https://metacpan.org/pod/local::lib
+
+The prerequisites of this distribution will also have to be installed manually. The
+prerequisites are listed in one of the files: `MYMETA.yml` or `MYMETA.json` generated
+by running the manual build process described above.
+
+## Configure Prerequisites
+
+This distribution requires other modules to be installed before this
+distribution's installer can be run. They can be found under the
+"configure_requires" key of META.yml or the
+"{prereqs}{configure}{requires}" key of META.json.
+
+## Other Prerequisites
+
+This distribution may require additional modules to be installed after running
+Makefile.PL.
+Look for prerequisites in the following phases:
+
+* to run make, PHASE = build
+* to use the module code itself, PHASE = runtime
+* to run tests, PHASE = test
+
+They can all be found in the "PHASE_requires" key of MYMETA.yml or the
+"{prereqs}{PHASE}{requires}" key of MYMETA.json.
+
+## Documentation
+
+File-Which documentation is available as POD.
+You can run `perldoc` from a shell to read the documentation:
+
+ % perldoc File::Which
+
+For more information on installing Perl modules via CPAN, please see:
+https://www.cpan.org/modules/INSTALL.html
--- /dev/null
+This software is copyright (c) 2002 by Per Einar Ellefsen <pereinar@cpan.org>.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+Terms of the Perl programming language system itself
+
+a) the GNU General Public License as published by the Free
+ Software Foundation; either version 1, or (at your option) any
+ later version, or
+b) the "Artistic License"
+
+--- The GNU General Public License, Version 1, February 1989 ---
+
+This software is Copyright (c) 2002 by Per Einar Ellefsen <pereinar@cpan.org>.
+
+This is free software, licensed under:
+
+ The GNU General Public License, Version 1, February 1989
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+--- The Artistic License 1.0 ---
+
+This software is Copyright (c) 2002 by Per Einar Ellefsen <pereinar@cpan.org>.
+
+This is free software, licensed under:
+
+ The Artistic License 1.0
+
+The Artistic License
+
+Preamble
+
+The intent of this document is to state the conditions under which a Package
+may be copied, such that the Copyright Holder maintains some semblance of
+artistic control over the development of the package, while giving the users of
+the package the right to use and distribute the Package in a more-or-less
+customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+ - "Package" refers to the collection of files distributed by the Copyright
+ Holder, and derivatives of that collection of files created through
+ textual modification.
+ - "Standard Version" refers to such a Package if it has not been modified,
+ or has been modified in accordance with the wishes of the Copyright
+ Holder.
+ - "Copyright Holder" is whoever is named in the copyright or copyrights for
+ the package.
+ - "You" is you, if you're thinking about copying or distributing this Package.
+ - "Reasonable copying fee" is whatever you can justify on the basis of media
+ cost, duplication charges, time of people involved, and so on. (You will
+ not be required to justify it to the Copyright Holder, but only to the
+ computing community at large as a market that must bear the fee.)
+ - "Freely Available" means that no fee is charged for the item itself, though
+ there may be fees involved in handling the item. It also means that
+ recipients of the item may redistribute it under the same conditions they
+ received it.
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived
+from the Public Domain or from the Copyright Holder. A Package modified in such
+a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that
+you insert a prominent notice in each changed file stating how and when you
+changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them
+ Freely Available, such as by posting said modifications to Usenet or an
+ equivalent medium, or placing the modifications on a major archive site
+ such as ftp.uu.net, or by allowing the Copyright Holder to include your
+ modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict with
+ standard executables, which must also be provided, and provide a separate
+ manual page for each non-standard executable that clearly documents how it
+ differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable
+form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files,
+ together with instructions (in the manual page or equivalent) on where to
+ get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of the Package
+ with your modifications.
+
+ c) accompany any non-standard executables with their corresponding Standard
+ Version executables, giving the non-standard executables non-standard
+ names, and clearly documenting the differences in manual pages (or
+ equivalent), together with instructions on where to get the Standard
+ Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package. You may charge any fee you choose for support of this Package. You
+may not charge a fee for this Package itself. However, you may distribute this
+Package in aggregate with other (possibly commercial) programs as part of a
+larger (possibly commercial) software distribution provided that you do not
+advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output
+from the programs of this Package do not automatically fall under the copyright
+of this Package, but belong to whomever generated them, and may be sold
+commercially, and may be aggregated with this Package.
+
+7. C or perl subroutines supplied by you and linked into this Package shall not
+be considered part of this Package.
+
+8. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
+
--- /dev/null
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.017.
+Changes
+INSTALL
+LICENSE
+MANIFEST
+META.json
+META.yml
+Makefile.PL
+README
+author.yml
+corpus/test-bin-unix/0
+corpus/test-bin-unix/README.txt
+corpus/test-bin-unix/all
+corpus/test-bin-unix/test3
+corpus/test-bin-unix/test4/foo.txt
+corpus/test-bin-win/0.exe
+corpus/test-bin-win/all.bat
+corpus/test-bin-win/all.exe
+corpus/test-bin-win/test1.exe
+corpus/test-bin-win/test2.bat
+dist.ini
+lib/File/Which.pm
+perlcriticrc
+t/00_diag.t
+t/01_use.t
+t/file_which.t
+xt/author/critic.t
+xt/author/eol.t
+xt/author/filename.t
+xt/author/no_tabs.t
+xt/author/pod.t
+xt/author/pod_coverage.t
+xt/author/pod_spelling_common.t
+xt/author/pod_spelling_system.t
+xt/author/strict.t
+xt/author/version.t
+xt/release/fixme.t
--- /dev/null
+{
+ "abstract" : "Perl implementation of the which utility as an API",
+ "author" : [
+ "Per Einar Ellefsen <pereinar@cpan.org>",
+ "Adam Kennedy <adamk@cpan.org>",
+ "Graham Ollis <plicease@cpan.org>"
+ ],
+ "dynamic_config" : 0,
+ "generated_by" : "Dist::Zilla version 6.017, CPAN::Meta::Converter version 2.150010",
+ "license" : [
+ "perl_5"
+ ],
+ "meta-spec" : {
+ "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+ "version" : 2
+ },
+ "name" : "File-Which",
+ "prereqs" : {
+ "configure" : {
+ "requires" : {
+ "ExtUtils::MakeMaker" : "0",
+ "perl" : "5.006"
+ }
+ },
+ "develop" : {
+ "requires" : {
+ "File::Basename" : "0",
+ "File::Find" : "0",
+ "File::chdir" : "0",
+ "FindBin" : "0",
+ "Perl::Critic" : "0",
+ "Test2::Require::Module" : "0.000060",
+ "Test2::Tools::PerlCritic" : "0",
+ "Test2::V0" : "0.000060",
+ "Test::EOL" : "0",
+ "Test::Fixme" : "0.07",
+ "Test::More" : "0.47",
+ "Test::NoTabs" : "0",
+ "Test::Pod" : "0",
+ "Test::Pod::Coverage" : "0",
+ "Test::Pod::Spelling::CommonMistakes" : "0",
+ "Test::Spelling" : "0",
+ "Test::Strict" : "0",
+ "YAML" : "0"
+ }
+ },
+ "runtime" : {
+ "requires" : {
+ "base" : "0",
+ "perl" : "5.006"
+ }
+ },
+ "test" : {
+ "requires" : {
+ "Env" : "0",
+ "Test::More" : "0.47",
+ "perl" : "5.006"
+ }
+ }
+ },
+ "release_status" : "stable",
+ "resources" : {
+ "bugtracker" : {
+ "web" : "https://github.com/uperl/File-Which/issues"
+ },
+ "homepage" : "https://metacpan.org/pod/File::Which",
+ "repository" : {
+ "type" : "git",
+ "url" : "git://github.com/uperl/File-Which.git",
+ "web" : "https://github.com/uperl/File-Which"
+ }
+ },
+ "version" : "1.27",
+ "x_generated_by_perl" : "v5.33.9",
+ "x_serialization_backend" : "Cpanel::JSON::XS version 4.26",
+ "x_spdx_expression" : "Artistic-1.0-Perl OR GPL-1.0-or-later",
+ "x_use_unsafe_inc" : 0
+}
+
--- /dev/null
+---
+abstract: 'Perl implementation of the which utility as an API'
+author:
+ - 'Per Einar Ellefsen <pereinar@cpan.org>'
+ - 'Adam Kennedy <adamk@cpan.org>'
+ - 'Graham Ollis <plicease@cpan.org>'
+build_requires:
+ Env: '0'
+ Test::More: '0.47'
+ perl: '5.006'
+configure_requires:
+ ExtUtils::MakeMaker: '0'
+ perl: '5.006'
+dynamic_config: 0
+generated_by: 'Dist::Zilla version 6.017, CPAN::Meta::Converter version 2.150010'
+license: perl
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: '1.4'
+name: File-Which
+requires:
+ base: '0'
+ perl: '5.006'
+resources:
+ bugtracker: https://github.com/uperl/File-Which/issues
+ homepage: https://metacpan.org/pod/File::Which
+ repository: git://github.com/uperl/File-Which.git
+version: '1.27'
+x_generated_by_perl: v5.33.9
+x_serialization_backend: 'YAML::Tiny version 1.73'
+x_spdx_expression: 'Artistic-1.0-Perl OR GPL-1.0-or-later'
+x_use_unsafe_inc: 0
--- /dev/null
+BEGIN {
+ use strict; use warnings;
+ unless(eval q{ use 5.006; 1}) {
+ print "Perl 5.006 or better required\n";
+ exit;
+ }
+}
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.017.
+use strict;
+use warnings;
+
+use 5.006;
+
+use ExtUtils::MakeMaker;
+
+my %WriteMakefileArgs = (
+ "ABSTRACT" => "Perl implementation of the which utility as an API",
+ "AUTHOR" => "Per Einar Ellefsen <pereinar\@cpan.org>, Adam Kennedy <adamk\@cpan.org>, Graham Ollis <plicease\@cpan.org>",
+ "CONFIGURE_REQUIRES" => {
+ "ExtUtils::MakeMaker" => 0
+ },
+ "DISTNAME" => "File-Which",
+ "LICENSE" => "perl",
+ "MIN_PERL_VERSION" => "5.006",
+ "NAME" => "File::Which",
+ "PREREQ_PM" => {
+ "base" => 0
+ },
+ "TEST_REQUIRES" => {
+ "Env" => 0,
+ "Test::More" => "0.47"
+ },
+ "VERSION" => "1.27",
+ "test" => {
+ "TESTS" => "t/*.t"
+ }
+);
+
+
+my %FallbackPrereqs = (
+ "Env" => 0,
+ "Test::More" => "0.47",
+ "base" => 0
+);
+
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+ delete $WriteMakefileArgs{TEST_REQUIRES};
+ delete $WriteMakefileArgs{BUILD_REQUIRES};
+ $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
+}
+
+delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
+ unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
+
+WriteMakefile(%WriteMakefileArgs);
--- /dev/null
+NAME
+
+ File::Which - Perl implementation of the which utility as an API
+
+VERSION
+
+ version 1.27
+
+SYNOPSIS
+
+ use File::Which; # exports which()
+ use File::Which qw(which where); # exports which() and where()
+
+ my $exe_path = which 'perldoc';
+
+ my @paths = where 'perl';
+ # Or
+ my @paths = which 'perl'; # an array forces search for all of them
+
+DESCRIPTION
+
+ File::Which finds the full or relative paths to executable programs on
+ the system. This is normally the function of which utility. which is
+ typically implemented as either a program or a built in shell command.
+ On some platforms, such as Microsoft Windows it is not provided as part
+ of the core operating system. This module provides a consistent API to
+ this functionality regardless of the underlying platform.
+
+ The focus of this module is correctness and portability. As a
+ consequence platforms where the current directory is implicitly part of
+ the search path such as Microsoft Windows will find executables in the
+ current directory, whereas on platforms such as UNIX where this is not
+ the case executables in the current directory will only be found if the
+ current directory is explicitly added to the path.
+
+ If you need a portable which on the command line in an environment that
+ does not provide it, install App::pwhich which provides a command line
+ interface to this API.
+
+ Implementations
+
+ File::Which searches the directories of the user's PATH (the current
+ implementation uses File::Spec#path to determine the correct PATH),
+ looking for executable files having the name specified as a parameter
+ to "which". Under Win32 systems, which do not have a notion of directly
+ executable files, but uses special extensions such as .exe and .bat to
+ identify them, File::Which takes extra steps to assure that you will
+ find the correct file (so for example, you might be searching for perl,
+ it'll try perl.exe, perl.bat, etc.)
+
+ Linux, *BSD and other UNIXes
+
+ There should not be any surprises here. The current directory will not
+ be searched unless it is explicitly added to the path.
+
+ Modern Windows (including NT, XP, Vista, 7, 8, 10 etc)
+
+ Windows NT has a special environment variable called PATHEXT, which is
+ used by the shell to look for executable files. Usually, it will
+ contain a list in the form .EXE;.BAT;.COM;.JS;.VBS etc. If File::Which
+ finds such an environment variable, it parses the list and uses it as
+ the different extensions.
+
+ Cygwin
+
+ Cygwin provides a Unix-like environment for Microsoft Windows users. In
+ most ways it works like other Unix and Unix-like environments, but in a
+ few key aspects it works like Windows. As with other Unix environments,
+ the current directory is not included in the search unless it is
+ explicitly included in the search path. Like on Windows, files with
+ .EXE or <.BAT> extensions will be discovered even if they are not part
+ of the query. .COM or extensions specified using the PATHEXT
+ environment variable will NOT be discovered without the fully qualified
+ name, however.
+
+ Windows ME, 98, 95, MS-DOS, OS/2
+
+ This set of operating systems don't have the PATHEXT variable, and
+ usually you will find executable files there with the extensions .exe,
+ .bat and (less likely) .com. File::Which uses this hardcoded list if
+ it's running under Win32 but does not find a PATHEXT variable.
+
+ As of 2015 none of these platforms are tested frequently (or perhaps
+ ever), but the current maintainer is determined not to intentionally
+ remove support for older operating systems.
+
+ VMS
+
+ Same case as Windows 9x: uses .exe and .com (in that order).
+
+ As of 2015 the current maintainer does not test on VMS, and is in fact
+ not certain it has ever been tested on VMS. If this platform is
+ important to you and you can help me verify and or support it on that
+ platform please contact me.
+
+FUNCTIONS
+
+ which
+
+ my $path = which $short_exe_name;
+ my @paths = which $short_exe_name;
+
+ Exported by default.
+
+ $short_exe_name is the name used in the shell to call the program (for
+ example, perl).
+
+ If it finds an executable with the name you specified, which() will
+ return the absolute path leading to this executable (for example,
+ /usr/bin/perl or C:\Perl\Bin\perl.exe).
+
+ If it does not find the executable, it returns undef.
+
+ If which() is called in list context, it will return all the matches.
+
+ where
+
+ my @paths = where $short_exe_name;
+
+ Not exported by default.
+
+ Same as "which" in array context. Similar to the where csh built-in
+ command or which -a command for platforms that support the -a option.
+ Will return an array containing all the path names matching
+ $short_exe_name.
+
+GLOBALS
+
+ $IMPLICIT_CURRENT_DIR
+
+ True if the current directory is included in the search implicitly on
+ whatever platform you are using. Normally the default is reasonable,
+ but on Windows the current directory is included implicitly for older
+ shells like cmd.exe and command.com, but not for newer shells like
+ PowerShell. If you overrule this default, you should ALWAYS localize
+ the variable to the tightest scope possible, since setting this
+ variable from a module can affect other modules. Thus on Windows you
+ can get the correct result if the user is running either cmd.exe or
+ PowerShell on Windows you can do this:
+
+ use File::Which qw( which );
+ use Shell::Guess;
+
+ my $path = do {
+ my $is_power = Shell::Guess->running_shell->is_power;
+ local $File::Which::IMPLICIT_CURRENT_DIR = !$is_power;
+ which 'foo';
+ };
+
+ For a variety of reasons it is difficult to accurately compute the
+ shell that a user is using, but Shell::Guess makes a reasonable effort.
+
+CAVEATS
+
+ This module has no non-core requirements for Perl 5.6.2 and better.
+
+ This module is fully supported back to Perl 5.8.1. It may work on
+ 5.8.0. It should work on Perl 5.6.x and I may even test on 5.6.2. I
+ will accept patches to maintain compatibility for such older Perls, but
+ you may need to fix it on 5.6.x / 5.8.0 and send me a patch.
+
+ Not tested on VMS although there is platform specific code for those.
+ Anyone who haves a second would be very kind to send me a report of how
+ it went.
+
+SUPPORT
+
+ Bugs should be reported via the GitHub issue tracker
+
+ https://github.com/uperl/File-Which/issues
+
+ For other issues, contact the maintainer.
+
+SEE ALSO
+
+ pwhich, App::pwhich
+
+ Command line interface to this module.
+
+ IPC::Cmd
+
+ Requires Perl 5.8.3. Included as part of the Perl core as of 5.9.5.
+
+ This module provides (among other things) a can_run function, which
+ is similar to which. It is a much heavier module since it does a lot
+ more, and if you use can_run it pulls in ExtUtils::MakeMaker. This
+ combination may be overkill for applications which do not need
+ IPC::Cmd's complicated interface for running programs, or do not need
+ the memory overhead required for installing Perl modules.
+
+ At least some older versions will find executables in the current
+ directory, even if the current directory is not in the search path
+ (which is the default on modern Unix).
+
+ can_run converts directory path name to the 8.3 version on Windows
+ using Win32::GetShortPathName in some cases. This is frequently
+ useful for tools that just need to run something using system in
+ scalar mode, but may be inconvenient for tools like App::pwhich where
+ user readability is a premium. Relying on Win32::GetShortPathName to
+ produce filenames without spaces is problematic, as 8.3 filenames can
+ be turned off with tweaks to the registry (see
+ https://technet.microsoft.com/en-us/library/cc959352.aspx).
+
+ Devel::CheckBin
+
+ Requires Perl 5.8.1.
+
+ This module purports to "check that a command is available", but does
+ not provide any documentation on how you might use it.
+
+ This module also relies on ExtUtils::MakeMaker so has the same
+ overhead burdens as IPC::Cmd.
+
+AUTHORS
+
+ * Per Einar Ellefsen <pereinar@cpan.org>
+
+ * Adam Kennedy <adamk@cpan.org>
+
+ * Graham Ollis <plicease@cpan.org>
+
+COPYRIGHT AND LICENSE
+
+ This software is copyright (c) 2002 by Per Einar Ellefsen
+ <pereinar@cpan.org>.
+
+ This is free software; you can redistribute it and/or modify it under
+ the same terms as the Perl 5 programming language system itself.
+
--- /dev/null
+---
+pod_spelling_system:
+ skip: 0
+ # list of words that are spelled correctly
+ # (regardless of what spell check thinks)
+ stopwords:
+ - 9x
+ - Bekman
+ - DocSet
+ - Einar
+ - Ellefsen
+ - OS2
+ - Stas
+ - Win32
+ - XP
+ - PowerShell
+
+pod_coverage:
+ skip: 0
+ # format is "Class#method" or "Class", regex allowed
+ # for either Class or method.
+ private: []
+
--- /dev/null
+The files included in this directory are only used for testing: they
+should not be executed: especially the *.exe files which aren't really
+compiled programs, only empty files with special filenames (as
+File::Which only cares about special attributes). Do NOT try to run
+them.
--- /dev/null
+#!bash
+# above shebang needed so Cygwin treats it as -x
\ No newline at end of file
--- /dev/null
+#!sh
+
+# ^ above shebang is needed for Cygwin
+echo "Just testing File::Which"
+echo "Nothing interesting here"
--- /dev/null
+This file only needs to be here to test4 dir is copied over.
\ No newline at end of file
--- /dev/null
+DO NOT RUN THIS PROGRAM
+IT IS ONLY TO TEST File::Which
--- /dev/null
+@echo off\r
+echo This is for testing File::Which\r
+echo Nothing interesting here!
\ No newline at end of file
--- /dev/null
+name = File-Which
+author = Per Einar Ellefsen <pereinar@cpan.org>
+author = Adam Kennedy <adamk@cpan.org>
+author = Graham Ollis <plicease@cpan.org>
+license = Perl_5
+copyright_holder = Per Einar Ellefsen <pereinar@cpan.org>
+copyright_year = 2002
+version = 1.27
+
+[@Author::Plicease]
+:version = 2.44
+release_tests = 1
+installer = MakeMaker
+release_tests_skip = changes\.t
+upgrade = Test::More = 0.47
+github_user = uperl
+workflow = linux
+workflow = windows
+workflow = macos
+workflow = msys2-mingw
+workflow = cygwin
+
+[RemovePrereqs]
+remove = strict
+remove = warnings
+remove = constant
+remove = Exporter
+remove = File::Spec
+
+[Author::Plicease::Upload]
+cpan = 1
+
+[OnlyCorePrereqs]
+starting_version = 5.006002
+
+[PruneFiles]
+filename = xt/release/changes.t
--- /dev/null
+package File::Which;
+
+use strict;
+use warnings;
+use base qw( Exporter );
+use File::Spec ();
+
+# ABSTRACT: Perl implementation of the which utility as an API
+our $VERSION = '1.27'; # VERSION
+
+
+our @EXPORT = 'which';
+our @EXPORT_OK = 'where';
+
+use constant IS_VMS => ($^O eq 'VMS');
+use constant IS_MAC => ($^O eq 'MacOS');
+use constant IS_WIN => ($^O eq 'MSWin32' or $^O eq 'dos' or $^O eq 'os2');
+use constant IS_DOS => IS_WIN();
+use constant IS_CYG => ($^O eq 'cygwin' || $^O eq 'msys');
+
+our $IMPLICIT_CURRENT_DIR = IS_WIN || IS_VMS || IS_MAC;
+
+# For Win32 systems, stores the extensions used for
+# executable files
+# For others, the empty string is used
+# because 'perl' . '' eq 'perl' => easier
+my @PATHEXT = ('');
+if ( IS_WIN ) {
+ # WinNT. PATHEXT might be set on Cygwin, but not used.
+ if ( $ENV{PATHEXT} ) {
+ push @PATHEXT, split /;/, $ENV{PATHEXT};
+ } else {
+ # Win9X or other: doesn't have PATHEXT, so needs hardcoded.
+ push @PATHEXT, qw{.com .exe .bat};
+ }
+} elsif ( IS_VMS ) {
+ push @PATHEXT, qw{.exe .com};
+} elsif ( IS_CYG ) {
+ # See this for more info
+ # http://cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-exe
+ push @PATHEXT, qw{.exe .com};
+}
+
+
+sub which {
+ my ($exec) = @_;
+
+ return undef unless defined $exec;
+ return undef if $exec eq '';
+
+ my $all = wantarray; ## no critic (Freenode::Wantarray)
+ my @results = ();
+
+ # check for aliases first
+ if ( IS_VMS ) {
+ my $symbol = `SHOW SYMBOL $exec`;
+ chomp($symbol);
+ unless ( $? ) {
+ return $symbol unless $all;
+ push @results, $symbol;
+ }
+ }
+ if ( IS_MAC ) {
+ my @aliases = split /\,/, $ENV{Aliases};
+ foreach my $alias ( @aliases ) {
+ # This has not been tested!!
+ # PPT which says MPW-Perl cannot resolve `Alias $alias`,
+ # let's just hope it's fixed
+ if ( lc($alias) eq lc($exec) ) {
+ chomp(my $file = `Alias $alias`);
+ last unless $file; # if it failed, just go on the normal way
+ return $file unless $all;
+ push @results, $file;
+ # we can stop this loop as if it finds more aliases matching,
+ # it'll just be the same result anyway
+ last;
+ }
+ }
+ }
+
+ return $exec ## no critic (ValuesAndExpressions::ProhibitMixedBooleanOperators)
+ if !IS_VMS and !IS_MAC and !IS_WIN and $exec =~ /\// and -f $exec and -x $exec;
+
+ my @path;
+ if($^O eq 'MSWin32') {
+ # File::Spec (at least recent versions)
+ # add the implicit . for you on MSWin32,
+ # but we may or may not want to include
+ # that.
+ @path = split /;/, $ENV{PATH};
+ s/"//g for @path;
+ @path = grep length, @path;
+ } else {
+ @path = File::Spec->path;
+ }
+ if ( $IMPLICIT_CURRENT_DIR ) {
+ unshift @path, File::Spec->curdir;
+ }
+
+ foreach my $base ( map { File::Spec->catfile($_, $exec) } @path ) {
+ for my $ext ( @PATHEXT ) {
+ my $file = $base.$ext;
+
+ # We don't want dirs (as they are -x)
+ next if -d $file;
+
+ if (
+ # Executable, normal case
+ -x _
+ or (
+ # MacOS doesn't mark as executable so we check -e
+ IS_MAC ## no critic (ValuesAndExpressions::ProhibitMixedBooleanOperators)
+ ||
+ (
+ ( IS_WIN or IS_CYG )
+ and
+ grep { ## no critic (BuiltinFunctions::ProhibitBooleanGrep)
+ $file =~ /$_\z/i
+ } @PATHEXT[1..$#PATHEXT]
+ )
+ # DOSish systems don't pass -x on
+ # non-exe/bat/com files. so we check -e.
+ # However, we don't want to pass -e on files
+ # that aren't in PATHEXT, like README.
+ and -e _
+ )
+ ) {
+ return $file unless $all;
+ push @results, $file;
+ }
+ }
+ }
+
+ if ( $all ) {
+ return @results;
+ } else {
+ return undef;
+ }
+}
+
+
+sub where {
+ # force wantarray
+ my @res = which($_[0]);
+ return @res;
+}
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+File::Which - Perl implementation of the which utility as an API
+
+=head1 VERSION
+
+version 1.27
+
+=head1 SYNOPSIS
+
+ use File::Which; # exports which()
+ use File::Which qw(which where); # exports which() and where()
+
+ my $exe_path = which 'perldoc';
+
+ my @paths = where 'perl';
+ # Or
+ my @paths = which 'perl'; # an array forces search for all of them
+
+=head1 DESCRIPTION
+
+L<File::Which> finds the full or relative paths to executable programs on
+the system. This is normally the function of C<which> utility. C<which> is
+typically implemented as either a program or a built in shell command. On
+some platforms, such as Microsoft Windows it is not provided as part of the
+core operating system. This module provides a consistent API to this
+functionality regardless of the underlying platform.
+
+The focus of this module is correctness and portability. As a consequence
+platforms where the current directory is implicitly part of the search path
+such as Microsoft Windows will find executables in the current directory,
+whereas on platforms such as UNIX where this is not the case executables
+in the current directory will only be found if the current directory is
+explicitly added to the path.
+
+If you need a portable C<which> on the command line in an environment that
+does not provide it, install L<App::pwhich> which provides a command line
+interface to this API.
+
+=head2 Implementations
+
+L<File::Which> searches the directories of the user's C<PATH> (the current
+implementation uses L<File::Spec#path> to determine the correct C<PATH>),
+looking for executable files having the name specified as a parameter to
+L</which>. Under Win32 systems, which do not have a notion of directly
+executable files, but uses special extensions such as C<.exe> and C<.bat>
+to identify them, C<File::Which> takes extra steps to assure that
+you will find the correct file (so for example, you might be searching for
+C<perl>, it'll try F<perl.exe>, F<perl.bat>, etc.)
+
+=head3 Linux, *BSD and other UNIXes
+
+There should not be any surprises here. The current directory will not be
+searched unless it is explicitly added to the path.
+
+=head3 Modern Windows (including NT, XP, Vista, 7, 8, 10 etc)
+
+Windows NT has a special environment variable called C<PATHEXT>, which is used
+by the shell to look for executable files. Usually, it will contain a list in
+the form C<.EXE;.BAT;.COM;.JS;.VBS> etc. If C<File::Which> finds such an
+environment variable, it parses the list and uses it as the different
+extensions.
+
+=head3 Cygwin
+
+Cygwin provides a Unix-like environment for Microsoft Windows users. In most
+ways it works like other Unix and Unix-like environments, but in a few key
+aspects it works like Windows. As with other Unix environments, the current
+directory is not included in the search unless it is explicitly included in
+the search path. Like on Windows, files with C<.EXE> or <.BAT> extensions will
+be discovered even if they are not part of the query. C<.COM> or extensions
+specified using the C<PATHEXT> environment variable will NOT be discovered
+without the fully qualified name, however.
+
+=head3 Windows ME, 98, 95, MS-DOS, OS/2
+
+This set of operating systems don't have the C<PATHEXT> variable, and usually
+you will find executable files there with the extensions C<.exe>, C<.bat> and
+(less likely) C<.com>. C<File::Which> uses this hardcoded list if it's running
+under Win32 but does not find a C<PATHEXT> variable.
+
+As of 2015 none of these platforms are tested frequently (or perhaps ever),
+but the current maintainer is determined not to intentionally remove support
+for older operating systems.
+
+=head3 VMS
+
+Same case as Windows 9x: uses C<.exe> and C<.com> (in that order).
+
+As of 2015 the current maintainer does not test on VMS, and is in fact not
+certain it has ever been tested on VMS. If this platform is important to you
+and you can help me verify and or support it on that platform please contact
+me.
+
+=head1 FUNCTIONS
+
+=head2 which
+
+ my $path = which $short_exe_name;
+ my @paths = which $short_exe_name;
+
+Exported by default.
+
+C<$short_exe_name> is the name used in the shell to call the program (for
+example, C<perl>).
+
+If it finds an executable with the name you specified, C<which()> will return
+the absolute path leading to this executable (for example, F</usr/bin/perl> or
+F<C:\Perl\Bin\perl.exe>).
+
+If it does I<not> find the executable, it returns C<undef>.
+
+If C<which()> is called in list context, it will return I<all> the
+matches.
+
+=head2 where
+
+ my @paths = where $short_exe_name;
+
+Not exported by default.
+
+Same as L</which> in array context. Similar to the C<where> csh
+built-in command or C<which -a> command for platforms that support the
+C<-a> option. Will return an array containing all the path names
+matching C<$short_exe_name>.
+
+=head1 GLOBALS
+
+=head2 $IMPLICIT_CURRENT_DIR
+
+True if the current directory is included in the search implicitly on
+whatever platform you are using. Normally the default is reasonable,
+but on Windows the current directory is included implicitly for older
+shells like C<cmd.exe> and C<command.com>, but not for newer shells
+like PowerShell. If you overrule this default, you should ALWAYS
+localize the variable to the tightest scope possible, since setting
+this variable from a module can affect other modules. Thus on Windows
+you can get the correct result if the user is running either C<cmd.exe>
+or PowerShell on Windows you can do this:
+
+ use File::Which qw( which );
+ use Shell::Guess;
+
+ my $path = do {
+ my $is_power = Shell::Guess->running_shell->is_power;
+ local $File::Which::IMPLICIT_CURRENT_DIR = !$is_power;
+ which 'foo';
+ };
+
+For a variety of reasons it is difficult to accurately compute the
+shell that a user is using, but L<Shell::Guess> makes a reasonable
+effort.
+
+=head1 CAVEATS
+
+This module has no non-core requirements for Perl 5.6.2 and better.
+
+This module is fully supported back to Perl 5.8.1. It may work on 5.8.0.
+It should work on Perl 5.6.x and I may even test on 5.6.2. I will accept
+patches to maintain compatibility for such older Perls, but you may
+need to fix it on 5.6.x / 5.8.0 and send me a patch.
+
+Not tested on VMS although there is platform specific code
+for those. Anyone who haves a second would be very kind to send me a
+report of how it went.
+
+=head1 SUPPORT
+
+Bugs should be reported via the GitHub issue tracker
+
+L<https://github.com/uperl/File-Which/issues>
+
+For other issues, contact the maintainer.
+
+=head1 SEE ALSO
+
+=over 4
+
+=item L<pwhich>, L<App::pwhich>
+
+Command line interface to this module.
+
+=item L<IPC::Cmd>
+
+Requires Perl 5.8.3. Included as part of the Perl core as of 5.9.5.
+
+This module provides (among other things) a C<can_run> function, which is
+similar to C<which>. It is a much heavier module since it does a lot more,
+and if you use C<can_run> it pulls in L<ExtUtils::MakeMaker>. This combination
+may be overkill for applications which do not need L<IPC::Cmd>'s complicated
+interface for running programs, or do not need the memory overhead required
+for installing Perl modules.
+
+At least some older versions will find executables in the current directory,
+even if the current directory is not in the search path (which is the default
+on modern Unix).
+
+C<can_run> converts directory path name to the 8.3 version on Windows using
+C<Win32::GetShortPathName> in some cases. This is frequently useful for tools
+that just need to run something using C<system> in scalar mode, but may be
+inconvenient for tools like L<App::pwhich> where user readability is a premium.
+Relying on C<Win32::GetShortPathName> to produce filenames without spaces
+is problematic, as 8.3 filenames can be turned off with tweaks to the
+registry (see L<https://technet.microsoft.com/en-us/library/cc959352.aspx>).
+
+=item L<Devel::CheckBin>
+
+Requires Perl 5.8.1.
+
+This module purports to "check that a command is available", but does not
+provide any documentation on how you might use it.
+
+This module also relies on L<ExtUtils::MakeMaker> so has the same overhead
+burdens as L<IPC::Cmd>.
+
+=back
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Per Einar Ellefsen <pereinar@cpan.org>
+
+=item *
+
+Adam Kennedy <adamk@cpan.org>
+
+=item *
+
+Graham Ollis <plicease@cpan.org>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2002 by Per Einar Ellefsen <pereinar@cpan.org>.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
--- /dev/null
+severity = 1
+only = 1
+
+[Freenode::ArrayAssignAref]
+[Freenode::BarewordFilehandles]
+[Freenode::ConditionalDeclarations]
+[Freenode::ConditionalImplicitReturn]
+[Freenode::DeprecatedFeatures]
+[Freenode::DiscouragedModules]
+[Freenode::DollarAB]
+[Freenode::Each]
+[Freenode::EmptyReturn]
+[Freenode::IndirectObjectNotation]
+[Freenode::LexicalForeachIterator]
+[Freenode::LoopOnHash]
+[Freenode::ModPerl]
+[Freenode::OpenArgs]
+[Freenode::OverloadOptions]
+[Freenode::POSIXImports]
+[Freenode::PackageMatchesFilename]
+[Freenode::PreferredAlternatives]
+[Freenode::StrictWarnings]
+extra_importers = Test2::V0
+[Freenode::Threads]
+[Freenode::Wantarray]
+[Freenode::WarningsSwitch]
+[Freenode::WhileDiamondDefaultAssignment]
+
+[BuiltinFunctions::ProhibitBooleanGrep]
+[BuiltinFunctions::ProhibitStringyEval]
+[BuiltinFunctions::ProhibitStringySplit]
+[BuiltinFunctions::ProhibitVoidGrep]
+[BuiltinFunctions::ProhibitVoidMap]
+[ClassHierarchies::ProhibitExplicitISA]
+[ClassHierarchies::ProhibitOneArgBless]
+[CodeLayout::ProhibitHardTabs]
+allow_leading_tabs = 0
+[CodeLayout::ProhibitTrailingWhitespace]
+[CodeLayout::RequireConsistentNewlines]
+[ControlStructures::ProhibitLabelsWithSpecialBlockNames]
+[ControlStructures::ProhibitMutatingListFunctions]
+[ControlStructures::ProhibitUnreachableCode]
+[InputOutput::ProhibitBarewordFileHandles]
+[InputOutput::ProhibitJoinedReadline]
+[InputOutput::ProhibitTwoArgOpen]
+[Miscellanea::ProhibitFormats]
+[Miscellanea::ProhibitUselessNoCritic]
+[Modules::ProhibitConditionalUseStatements]
+;[Modules::RequireEndWithOne]
+[Modules::RequireNoMatchVarsWithUseEnglish]
+[Objects::ProhibitIndirectSyntax]
+[RegularExpressions::ProhibitUselessTopic]
+[Subroutines::ProhibitNestedSubs]
+[ValuesAndExpressions::ProhibitLeadingZeros]
+[ValuesAndExpressions::ProhibitMixedBooleanOperators]
+[ValuesAndExpressions::ProhibitSpecialLiteralHeredocTerminator]
+[ValuesAndExpressions::RequireUpperCaseHeredocTerminator]
+[Variables::ProhibitPerl4PackageNames]
+[Variables::ProhibitUnusedVariables]
--- /dev/null
+use strict;
+use warnings;
+use Config;
+use Test::More tests => 1;
+
+# This .t file is generated.
+# make changes instead to dist.ini
+
+my %modules;
+my $post_diag;
+
+$modules{$_} = $_ for qw(
+ Env
+ ExtUtils::MakeMaker
+ Test::More
+);
+
+
+
+my @modules = sort keys %modules;
+
+sub spacer ()
+{
+ diag '';
+ diag '';
+ diag '';
+}
+
+pass 'okay';
+
+my $max = 1;
+$max = $_ > $max ? $_ : $max for map { length $_ } @modules;
+our $format = "%-${max}s %s";
+
+spacer;
+
+my @keys = sort grep /(MOJO|PERL|\A(LC|HARNESS)_|\A(SHELL|LANG)\Z)/i, keys %ENV;
+
+if(@keys > 0)
+{
+ diag "$_=$ENV{$_}" for @keys;
+
+ if($ENV{PERL5LIB})
+ {
+ spacer;
+ diag "PERL5LIB path";
+ diag $_ for split $Config{path_sep}, $ENV{PERL5LIB};
+
+ }
+ elsif($ENV{PERLLIB})
+ {
+ spacer;
+ diag "PERLLIB path";
+ diag $_ for split $Config{path_sep}, $ENV{PERLLIB};
+ }
+
+ spacer;
+}
+
+diag sprintf $format, 'perl', "$] $^O $Config{archname}";
+
+foreach my $module (@modules)
+{
+ my $pm = "$module.pm";
+ $pm =~ s{::}{/}g;
+ if(eval { require $pm; 1 })
+ {
+ my $ver = eval { $module->VERSION };
+ $ver = 'undef' unless defined $ver;
+ diag sprintf $format, $module, $ver;
+ }
+ else
+ {
+ diag sprintf $format, $module, '-';
+ }
+}
+
+if($post_diag)
+{
+ spacer;
+ $post_diag->();
+}
+
+spacer;
+
--- /dev/null
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+use_ok( 'File::Which' );
--- /dev/null
+use strict;
+use warnings;
+use Env qw( @PATH );
+use Test::More tests => 19;
+use File::Spec ();
+use File::Which qw(which where);
+
+unless (File::Which::IS_VMS or File::Which::IS_MAC or File::Which::IS_WIN ) {
+ foreach my $path (qw(
+ corpus/test-bin-unix/test3
+ corpus/test-bin-unix/all
+ corpus/test-bin-unix/0
+ corpus/test-bin-win/0.exe
+ corpus/test-bin-win/all.bat
+ corpus/test-bin-win/all.exe
+ corpus/test-bin-win/test1.exe
+ corpus/test-bin-win/test2.bat
+ )) {
+ chmod 0755, $path;
+ }
+}
+
+{
+
+ local $ENV{PATH} = $ENV{PATH};
+
+ # Check that it returns undef if no file is passed
+ is(
+ scalar(which('')), undef,
+ 'Null-length false result',
+ );
+ is(
+ scalar(which('non_existent_very_unlinkely_thingy_executable')), undef,
+ 'Positive length false result',
+ );
+
+ # Where is the test application
+ my $test_bin = File::Spec->catdir( 'corpus', File::Which::IS_WIN ? 'test-bin-win' : 'test-bin-unix' );
+ ok( -d $test_bin, 'Found test-bin' );
+
+ # Set up for running the test application
+ @PATH = $test_bin;
+ push @PATH, File::Spec->catdir( 'corpus', 'test-bin-win' ) if File::Which::IS_CYG;
+
+ SKIP: {
+ skip("Not on DOS-like filesystem", 3) unless File::Which::IS_WIN;
+ is( lc scalar which('test1'), 'corpus\test-bin-win\test1.exe', 'Looking for test1.exe' );
+ is( lc scalar which('test2'), 'corpus\test-bin-win\test2.bat', 'Looking for test2.bat' );
+ is( scalar which('test3'), undef, 'test3 returns undef' );
+ }
+
+ SKIP: {
+ skip("Not on a UNIX filesystem", 1) if File::Which::IS_WIN;
+ skip("Not on a UNIX filesystem", 1) if File::Which::IS_MAC;
+ skip("Not on a UNIX filesystem", 1) if File::Which::IS_VMS;
+ is(
+ scalar(which('test3')),
+ File::Spec->catfile( $test_bin, 'test3'),
+ 'Check test3 for Unix',
+ );
+ }
+
+ SKIP: {
+ skip("Not on a cygwin filesystem", 2) unless File::Which::IS_CYG;
+
+ # Cygwin: should make test1.exe transparent
+ is(
+ scalar(which('test1')),
+ File::Spec->catfile( 'corpus', 'test-bin-win', 'test1' ),
+ 'Looking for test1 on Cygwin: transparent to test1.exe',
+ );
+ is(
+ scalar(which('test4')),
+ undef,
+ 'Make sure that which() doesn\'t return a directory',
+ );
+ }
+
+ # Make sure that .\ stuff works on DOSish, VMS, MacOS (. is in PATH implicitly).
+ SKIP: {
+ unless ( File::Which::IS_WIN or File::Which::IS_VMS ) {
+ skip("Not on a DOS or VMS filesystem", 1);
+ }
+
+ chdir( $test_bin );
+ is(
+ lc scalar which('test1'),
+ File::Spec->catfile(File::Spec->curdir(), 'test1.exe'),
+ 'Looking for test1.exe in curdir',
+ );
+ chdir File::Spec->updir;
+ chdir File::Spec->updir;
+ }
+
+}
+
+{
+
+ local $ENV{PATH} = $ENV{PATH};
+
+ # Where is the test application
+ my $test_bin = File::Spec->catdir( 'corpus', $^O =~ /^(MSWin32|dos|os2)$/ ? 'test-bin-win' : 'test-bin-unix' );
+ ok( -d $test_bin, 'Found test-bin' );
+
+ # Set up for running the test application
+ @PATH = ($test_bin);
+ push @PATH, File::Spec->catdir( 'corpus', 'test-bin-win' ) if $^O =~ /^(cygwin|msys)$/;
+
+ my @result = which('all');
+ like( $result[0], qr/all/i, 'Found all' );
+ ok( scalar(@result), 'Found at least one result' );
+
+ # Should have as many elements.
+ is(
+ scalar(@result),
+ scalar(where('all')),
+ 'Scalar which result matches where result',
+ );
+
+ my $zero = which '0';
+
+ ok(
+ $zero,
+ "zero = $zero"
+ );
+
+ my $empty_string = which '';
+
+ is(
+ $empty_string,
+ undef,
+ "empty string"
+ );
+
+}
+
+# Look for Perl itself
+SKIP: {
+ local $ENV{PATH} = $ENV{PATH};
+ my $tool;
+
+ {
+ my ($volume,$directories,$file) = File::Spec->splitpath($^X);
+ $tool = $file;
+ my $dir = File::Spec->catpath($volume, $directories);
+ if(defined $dir && length $dir)
+ {
+ #diag "temporarily adding $dir to PATH";
+ push @PATH, $dir;
+ }
+ }
+
+ skip("Not able to find the name of Perl", 3) unless defined $tool;
+
+ my $path = which($tool);
+ ok( defined $path, "Found path to $tool" );
+ ok( $path, "Found path to $tool" );
+ ok( -f $path, "$tool exists" );
+
+}
+
--- /dev/null
+use Test2::Require::Module 'Test2::Tools::PerlCritic';
+use Test2::Require::Module 'Perl::Critic';
+use Test2::Require::Module 'Perl::Critic::Freenode';
+use Test2::V0;
+use Perl::Critic;
+use Test2::Tools::PerlCritic;
+
+my $critic = Perl::Critic->new(
+ -profile => 'perlcriticrc',
+);
+
+perl_critic_ok ['lib','t'], $critic;
+
+done_testing;
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+BEGIN {
+ plan skip_all => 'test requires Test::EOL'
+ unless eval q{ use Test::EOL; 1 };
+};
+use Test::EOL;
+use FindBin;
+use File::Spec;
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+all_perl_files_ok(grep { -e $_ } qw( bin lib t Makefile.PL ));
+
+
--- /dev/null
+use Test2::V0 -no_srand => 1;
+use File::chdir;
+use File::Find qw( find );
+use File::Basename qw( basename );
+
+my $basename = basename $CWD;
+
+my $dev = $basename =~ /^([A-Z]+)(-[A-Z]+)*$/i;
+
+local $CWD = '..';
+
+find(sub {
+ my $path = $File::Find::name;
+ return if $path =~ /^$basename\/\./;
+ return if $dev && $path =~ /^$basename\/$basename-/;
+ my $length = length($path);
+ cmp_ok $length, '<', 100, "$path";
+}, $basename);
+
+note "dev = $dev";
+
+done_testing;
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+BEGIN {
+ plan skip_all => 'test requires Test::NoTabs'
+ unless eval q{ use Test::NoTabs; 1 };
+};
+use Test::NoTabs;
+use FindBin;
+use File::Spec;
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+all_perl_files_ok( grep { -e $_ } qw( bin lib t Makefile.PL ));
+
+
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+BEGIN {
+ plan skip_all => 'test requires Test::Pod'
+ unless eval q{ use Test::Pod; 1 };
+};
+use Test::Pod;
+use FindBin;
+use File::Spec;
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+all_pod_files_ok( grep { -e $_ } qw( bin lib ));
+
+
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+BEGIN {
+ plan skip_all => 'test requires 5.010 or better'
+ unless $] >= 5.010;
+ plan skip_all => 'test requires Test::Pod::Coverage'
+ unless eval q{ use Test::Pod::Coverage; 1 };
+ plan skip_all => 'test requires YAML'
+ unless eval q{ use YAML; 1; };
+ plan skip_all => 'test does not always work in cip check'
+ if defined $ENV{CIPSTATIC} && $ENV{CIPSTATIC} eq 'true';
+};
+use Test::Pod::Coverage;
+use YAML qw( LoadFile );
+use FindBin;
+use File::Spec;
+
+my $config_filename = File::Spec->catfile(
+ $FindBin::Bin, File::Spec->updir, File::Spec->updir, 'author.yml'
+);
+
+my $config;
+$config = LoadFile($config_filename)
+ if -r $config_filename;
+
+plan skip_all => 'disabled' if $config->{pod_coverage}->{skip};
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+my @private_classes;
+my %private_methods;
+
+push @{ $config->{pod_coverage}->{private} },
+ 'Alien::.*::Install::Files#Inline';
+
+foreach my $private (@{ $config->{pod_coverage}->{private} })
+{
+ my($class,$method) = split /#/, $private;
+ if(defined $class && $class ne '')
+ {
+ my $regex = eval 'qr{^' . $class . '$}';
+ if(defined $method && $method ne '')
+ {
+ push @private_classes, { regex => $regex, method => $method };
+ }
+ else
+ {
+ push @private_classes, { regex => $regex, all => 1 };
+ }
+ }
+ elsif(defined $method && $method ne '')
+ {
+ $private_methods{$_} = 1 for split /,/, $method;
+ }
+}
+
+my @classes = all_modules;
+
+plan tests => scalar @classes;
+
+foreach my $class (@classes)
+{
+ SKIP: {
+ my($is_private_class) = map { 1 } grep { $class =~ $_->{regex} && $_->{all} } @private_classes;
+ skip "private class: $class", 1 if $is_private_class;
+
+ my %methods = map {; $_ => 1 } map { split /,/, $_->{method} } grep { $class =~ $_->{regex} } @private_classes;
+ $methods{$_} = 1 for keys %private_methods;
+
+ my $also_private = eval 'qr{^' . join('|', keys %methods ) . '$}';
+
+ pod_coverage_ok $class, { also_private => [$also_private] };
+ };
+}
+
+
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+BEGIN {
+ plan skip_all => 'test requires Test::Pod::Spelling::CommonMistakes'
+ unless eval q{ use Test::Pod::Spelling::CommonMistakes; 1 };
+ plan skip_all => 'test requires YAML'
+ unless eval q{ use YAML qw( LoadFile ); 1 };
+};
+use Test::Pod::Spelling::CommonMistakes;
+use FindBin;
+use File::Spec;
+
+my $config_filename = File::Spec->catfile(
+ $FindBin::Bin, File::Spec->updir, File::Spec->updir, 'author.yml'
+);
+
+my $config;
+$config = LoadFile($config_filename)
+ if -r $config_filename;
+
+plan skip_all => 'disabled' if $config->{pod_spelling_common}->{skip};
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+# TODO: test files in bin too.
+all_pod_files_ok;
+
+
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+BEGIN {
+ plan skip_all => 'test requires Test::Spelling'
+ unless eval q{ use Test::Spelling; 1 };
+ plan skip_all => 'test requires YAML'
+ unless eval q{ use YAML; 1; };
+};
+use Test::Spelling;
+use YAML qw( LoadFile );
+use FindBin;
+use File::Spec;
+
+my $config_filename = File::Spec->catfile(
+ $FindBin::Bin, File::Spec->updir, File::Spec->updir, 'author.yml'
+);
+
+my $config;
+$config = LoadFile($config_filename)
+ if -r $config_filename;
+
+plan skip_all => 'disabled' if $config->{pod_spelling_system}->{skip};
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+add_stopwords(@{ $config->{pod_spelling_system}->{stopwords} });
+add_stopwords(qw(
+Plicease
+stdout
+stderr
+stdin
+subref
+loopback
+username
+os
+Ollis
+Mojolicious
+plicease
+CPAN
+reinstall
+TODO
+filename
+filenames
+login
+callback
+callbacks
+standalone
+VMS
+hostname
+hostnames
+TCP
+UDP
+IP
+API
+MSWin32
+OpenBSD
+FreeBSD
+NetBSD
+unencrypted
+WebSocket
+WebSockets
+timestamp
+timestamps
+poney
+BackPAN
+portably
+RedHat
+AIX
+BSD
+XS
+FFI
+perlish
+optimizations
+subdirectory
+RESTful
+SQLite
+JavaScript
+dir
+plugins
+munge
+jQuery
+namespace
+PDF
+PDFs
+usernames
+DBI
+pluggable
+APIs
+SSL
+JSON
+YAML
+uncommented
+Solaris
+OpenVMS
+URI
+URL
+CGI
+));
+all_pod_files_spelling_ok;
+
+
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+BEGIN {
+ plan skip_all => 'test requires Test::Strict'
+ unless eval q{ use Test::Strict; 1 };
+};
+use Test::Strict;
+use FindBin;
+use File::Spec;
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+unshift @Test::Strict::MODULES_ENABLING_STRICT,
+ 'ozo',
+ 'Test2::Bundle::SIPS',
+ 'Test2::V0',
+ 'Test2::Bundle::Extended';
+note "enabling strict = $_" for @Test::Strict::MODULES_ENABLING_STRICT;
+
+all_perl_files_ok( grep { -e $_ } qw( bin lib t Makefile.PL ));
+
+
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+use FindBin ();
+BEGIN {
+
+ plan skip_all => "test requires Test::Version 2.00"
+ unless eval q{
+ use Test::Version 2.00 qw( version_all_ok ), {
+ has_version => 1,
+ filename_match => sub { $_[0] !~ m{/(ConfigData|Install/Files)\.pm$} },
+ };
+ 1
+ };
+
+ plan skip_all => 'test requires YAML'
+ unless eval q{ use YAML; 1; };
+}
+
+use YAML qw( LoadFile );
+use FindBin;
+use File::Spec;
+
+my $config_filename = File::Spec->catfile(
+ $FindBin::Bin, File::Spec->updir, File::Spec->updir, 'author.yml'
+);
+
+my $config;
+$config = LoadFile($config_filename)
+ if -r $config_filename;
+
+if($config->{version}->{dir})
+{
+ note "using dir " . $config->{version}->{dir}
+}
+
+version_all_ok($config->{version}->{dir} ? ($config->{version}->{dir}) : ());
+done_testing;
+
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+BEGIN {
+ plan skip_all => 'test requires Test::Fixme'
+ unless eval q{ use Test::Fixme 0.14; 1 };
+};
+use Test::Fixme 0.07;
+use FindBin;
+use File::Spec;
+
+chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
+
+run_tests(
+ match => qr/FIXME/,
+ where => [ grep { -e $_ } qw( bin lib t Makefile.PL Build.PL )],
+ warn => 1,
+);
+
+