1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
package File::Rename::Options;
use 5.032; # use strict; use warnings;
use Getopt::Long 2.24 ();
our $VERSION = 2.01;
our $IMPORTED;
sub import {
my $pack = shift;
if( $IMPORTED++ ) {
require Carp;
Carp::cluck("$pack->import() called twice");
}
my @config = qw(
posix_default
no_ignore_case
);
push @config, @_;
Getopt::Long::Configure(@config);
}
sub GetOptions {
my ($no_code) = @_;
my @expression;
my $fullpath = 1;
Getopt::Long::GetOptions(
'-v|verbose' => \my $verbose,
'-0|null' => \my $null,
'-n|nono' => \my $nono,
'-f|force' => \my $force,
'-h|?|help' => \my $help,
'-m|man' => \my $man,
'-V|version' => \my $version,
'-d|filename' => sub { undef $fullpath },
'-path|fullpath!' => \$fullpath,
'-e=s' => \@expression,
'-E=s' =>
sub {
my(undef, $e) = @_;
$e .= ';';
push @expression, $e;
},
'-u|unicode:s' => \my $unicode,
) or return;
my $options = {
verbose => $verbose,
input_null => $null,
no_action => $nono,
over_write => $force,
filename_only => !$fullpath,
show_help => $help,
show_manual => $man,
show_version => $version,
unicode_strings => defined $unicode,
encoding => $unicode,
};
return $options if $no_code;
return $options if $help or $man or $version;
if( @expression ) {
$options->{_code} = join "\n", @expression;
}
else {
return unless @ARGV;
$options->{_code} = shift @ARGV;
}
return $options;
}
sub bad_encoding {
my $options = shift;
my $encoding = $options->{encoding};
return unless $encoding;
return unless $encoding =~ /[^\s\w.-]/;
return 1
}
1;
__END__
=head1 NAME
File::Rename::Options - Option processing for File::Rename
=head1 SYNOPSIS
use File::Rename::Options;
my $options = File::Rename::Options::GetOptions()
or pod2usage;
use File::Rename::Options qw(no_require_order);
=head1 DESCRIPTION
=head2 CONFIGUATION
The parameters to C<use File::Rename::Options> are
configurations settings for Getopt::Long
The default configuration is posix_default and no_ignore_case;
other settings are added to this list.
=head2 FUNCTIONS
=over 4
=item C<GetOptions()>
Call C<Getopt::Long::GetOptions()> with options for rename script,
returning a HASH of options.
=item C<bad_encoding($options)>
Test if I<encoding> does not look like an encoding
=back
=head2 OPTIONS
See L<rename> script for options (in C<@ARGV>).
See L<File::Rename> for structure of the options HASH
=head1 ENVIRONMENT
No environment variables are used.
=head1 SEE ALSO
File::Rename(3), rename(1)
=head1 AUTHOR
Robin Barker <RMBarker@cpan.org>
=head1 DIAGNOSTICS
Returns C<undef> when there is an error in the options.
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2018, 2022, 2023 by Robin Barker
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8 or,
at your option, any later version of Perl 5 you may have available.
=cut
|