#!perl

# Note: This script is a CLI  for Riap function /Perinci/CmdLine/Util/detect_pericmd_script
# and generated automatically using Perinci::CmdLine::Gen version 0.43

our $DATE = '2017-01-13'; # DATE
our $DIST = 'App-PericmdUtils'; # DIST
our $VERSION = '0.04'; # VERSION

use 5.010001;
use strict;
use warnings;

use Perinci::CmdLine::Any;

Perinci::CmdLine::Any->new(
    url => "/Perinci/CmdLine/Util/detect_pericmd_script",
    program_name => "detect-pericmd-script",
)->run;

# ABSTRACT: Detect whether a file is a Perinci::CmdLine-based CLI script
# PODNAME: detect-pericmd-script

__END__

=pod

=encoding UTF-8

=head1 NAME

detect-pericmd-script - Detect whether a file is a Perinci::CmdLine-based CLI script

=head1 VERSION

This document describes version 0.04 of detect-pericmd-script (from Perl distribution App-PericmdUtils), released on 2017-01-13.

=head1 SYNOPSIS

Usage:

 % detect-pericmd-script [options] [filename]

=head1 DESCRIPTION

The criteria are:

=over

=item * the file must exist and readable;

=item * (optional, if C<include_noexec> is false) file must have its executable mode
bit set;

=item * content must start with a shebang C<#!>;

=item * either: must be perl script (shebang line contains 'perl') and must contain
something like C<use Perinci::CmdLine>;

=back

=head1 OPTIONS

C<*> marks required options.

=head2 Main options

=over

=item B<--filename>=I<s>

Path to file to be checked.

Either `filename` or `string` must be specified.


=item B<--no-include-noexec>

=item B<--string-base64>=I<s>

Path to file to be checked (base64-encoded).

See C<--string>.

=item B<--string>=I<s>

Path to file to be checked.

Either `file` or `string` must be specified.


=back

=head2 Configuration options

=over

=item B<--config-path>=I<filename>

Set path to configuration file.

Can be specified multiple times.

=item B<--config-profile>=I<s>

Set configuration profile to use.

=item B<--no-config>

Do not use any configuration file.

=back

=head2 Environment options

=over

=item B<--no-env>

Do not read environment for default options.

=back

=head2 Output options

=over

=item B<--format>=I<s>

Choose output format, e.g. json, text.

Default value:

 undef

=item B<--json>

Set output format to json.

=item B<--naked-res>

When outputing as JSON, strip result envelope.

Default value:

 0

By default, when outputing as JSON, the full enveloped result is returned, e.g.:

    [200,"OK",[1,2,3],{"func.extra"=>4}]

The reason is so you can get the status (1st element), status message (2nd
element) as well as result metadata/extra result (4th element) instead of just
the result (3rd element). However, sometimes you want just the result, e.g. when
you want to pipe the result for more post-processing. In this case you can use
`--naked-res` so you just get:

    [1,2,3]


=back

=head2 Other options

=over

=item B<--help>, B<-h>, B<-?>

Display help message and exit.

=item B<--version>, B<-v>

Display program's version and exit.

=back

=head1 CONFIGURATION FILE

This script can read configuration files. Configuration files are in the format of L<IOD>, which is basically INI with some extra features.

By default, these names are searched for configuration filenames (can be changed using C<--config-path>): F<~/.config/detect-pericmd-script.conf>, F<~/detect-pericmd-script.conf>, or F</etc/detect-pericmd-script.conf>.

All found files will be read and merged.

To disable searching for configuration files, pass C<--no-config>.

You can put multiple profiles in a single file by using section names like C<[profile=SOMENAME]> or C<[SOMESECTION profile=SOMENAME]>. Those sections will only be read if you specify the matching C<--config-profile SOMENAME>.

You can also put configuration for multiple programs inside a single file, and use filter C<program=NAME> in section names, e.g. C<[program=NAME ...]> or C<[SOMESECTION program=NAME]>. The section will then only be used when the reading program matches.

Finally, you can filter a section by environment variable using the filter C<env=CONDITION> in section names. For example if you only want a section to be read if a certain environment variable is true: C<[env=SOMEVAR ...]> or C<[SOMESECTION env=SOMEVAR ...]>. If you only want a section to be read when the value of an environment variable has value equals something: C<[env=HOSTNAME=blink ...]> or C<[SOMESECTION env=HOSTNAME=blink ...]>. If you only want a section to be read when the value of an environment variable does not equal something: C<[env=HOSTNAME!=blink ...]> or C<[SOMESECTION env=HOSTNAME!=blink ...]>. If you only want a section to be read when an environment variable contains something: C<[env=HOSTNAME*=server ...]> or C<[SOMESECTION env=HOSTNAME*=server ...]>. Note that currently due to simplistic parsing, there must not be any whitespace in the value being compared because it marks the beginning of a new section filter or section name.

List of available configuration parameters:

 filename (see --filename)
 format (see --format)
 include_noexec (see --no-include-noexec)
 naked_res (see --naked-res)
 string (see --string)

=head1 ENVIRONMENT

=head2 DETECT_PERICMD_SCRIPT_OPT => str

Specify additional command-line options

=head1 FILES

~/.config/detect-pericmd-script.conf

~/detect-pericmd-script.conf

/etc/detect-pericmd-script.conf

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/App-PericmdUtils>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-App-PericmdUtils>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=App-PericmdUtils>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 AUTHOR

perlancar <perlancar@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2017 by perlancar@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
