ルモーリン

Perlサンプル12 オプション処理とヘルプ表示

投稿:2019-12-21

実行時にオプションを指定できるようにして、それをヘルプ表示します。 ここでは、有効/無効(スイッチ)としてのオプションだけを扱いました。 他にも文字列や数値を指定するオプションを処理できるのでとても便利です。 自作のスクリプトでも時間が経てば忘れてしまうのでスクリプト内にメモを残しておくと後で参考になります。 ヘルプを表示できればエディタで開く事もありません。
オプション処理もヘルプ表示もお任せ♪
Getopt::Long - Extended processing of command line options - metacpan.org
#!/usr/bin/env perl

use v5.26;
use utf8;
use strict;
use warnings;

use feature "say";
use open IO => ":utf8";

use Encode::Argv;
use Encode::Locale;
use Getopt::Long qw(:config auto_help);

binmode STDOUT, ":encoding(console_out)";
binmode STDERR, ":encoding(console_out)";

$| = 1;

my %opt;

GetOptions(
	\%opt,
	"takoluka", "luka", "all",

) or die "オプションが誤っている";

if (@ARGV) {
	die "不要なオプションがある:'@ARGV'";
}

if ($opt{all}) {
	takoluka();
	luka();
} elsif ($opt{takoluka}) {
	takoluka();
} elsif ($opt{luka}) {
	luka();
} else {
	say "デフォルトの動作です。";
}

exit;

sub takoluka {
	say "たこルカは俺の嫁";
}

sub luka {
	say "ルカ姐さんも俺の嫁";
}

=pod

=head1 SYNOPSIS

perlsample_012.pl <オプション>

=head2 実行例

perl perlsample_012.pl --luka --takoluka(オプションtakolukaが有効)

=head2 オプション

この順で最初に見つかるオプションが優先します。

=over

=item 1.
all

全員の事を表示します。

=item 2.
takoluka

たこルカの事を表示します。

=item 3. 
luka

ルカ姐さんの事を表示します。

=back

=head2 オプションなし

デフォルトの動作をします。

=cut
オプションなし。
perl perlsample_012.pl
デフォルトの動作です。
各種のオプションを指定します。
perl perlsample_012.pl --all
たこルカは俺の嫁
ルカ姐さんも俺の嫁
perl perlsample_012.pl --takoluka
たこルカは俺の嫁
perl perlsample_012.pl --luka
ルカ姐さんも俺の嫁
ヘルプを表示します。
perl perlsample_012.pl --help
Usage:
    perlsample_012.pl <オプション>

  実行例:
    perl perlsample_012.pl --luka --takoluka(オプションtakolukaが有効)

  オプション:
    この順で最初に見つかるオプションが優先します。

    1. all
        全員の事を表示します。

    2. takoluka
        たこルカの事を表示します。

    3. luka
        ルカ姐さんの事を表示します。

  オプションなし:
    デフォルトの動作をします。
特定できれば短い名前にしてもOKです。
perl perlsample_012.pl --tako
たこルカは俺の嫁
オプションの1文字目が重複しなければ1文字でも特定できるのでOKです。
perl perlsample_012.pl --t
たこルカは俺の嫁
ハイフン2文字「--」を1文字「-」にしてもOKです。
perl perlsample_012.pl -takoluka
たこルカは俺の嫁
最短にした場合。
perl perlsample_012.pl -t
たこルカは俺の嫁
でもLinuxのコマンドによくあるハイフン「-」に続けて1文字のオプションを並べるのは分解してくれません。 GetOptionsで"bundling"指定が必要です。
perl perlsample_012.pl -atl
Unknown option: atl
オプションが誤っている at perlsample_012.pl line 22.
ハイフンなしのオプションがあればオプション処理後に拾えます。 このサンプルでは使わずにエラー扱いにしています。
perl perlsample_012.pl abc
不要なオプションがある:'abc' at perlsample_012.pl line 29.