こんばんは
Perl 6 Advent Calendar 2015の17日目です。
こんかいはPerl6でのプログラム引数の受け方
Perl5 だと
Perl5 で引数を解析するのにはGetopt::Std
モジュールやGetopt::Long
モジュールを使っていました。
15.1. Parsing Program Arguments - Perl Cookbook
Getopt::Std
use v5.18;
use Getopt::Std;
getopts("vo:", \my %args); # -v, -o ARG, sets $args{v}, $args{o}
$args{'v'} && say 'v';
$args{'o'} && say $args{'o'} ;
say @ARGV;
Getopt::Long
use v5.18;
use Getopt::Long;
GetOptions( "verbose" => \my $verbose, # -v or --verbose
"output=s" => \my $output ); # -o=string or --output=string
$verbose && say 'verbose';
$output && say $output;
Perl6 だと
multi dispatch
たとえば、以下のような書き方でinstall
, info
, search
, help
のオプション指定可能なプログラムができます。1
use v6;
multi MAIN ('install', *@modules, Bool :$notests, Bool :$nodeps) {}
multi MAIN ('info', *@modules, Str :$prefix) {}
multi MAIN ('search', $pattern = '', Str :$prefix) {}
multi MAIN ('help') {
qq:x/ perl6 $*PROGRAM-NAME /.say;
}
そして、これを引数無しで実行すると「使い方」が出力されます。魔法みたい
$ perl6 getopt.pl6
Usage:
getopt.pl6 [--notests] [--nodeps] install [<modules> ...]
getopt.pl6 [--prefix=<Str>] info [<modules> ...]
getopt.pl6 [--prefix=<Str>] search [<pattern>]
getopt.pl6 help
USAGE
サブルーチンを定義しておけば、「使い方」としてそれが実行されます。
use v6;
multi MAIN ('verbose') { }
multi MAIN ('help') {}
sub USAGE () {
note q:to/このプログラムの使い方だよー/.chomp;
⌒Y⌒
|
(Y) / ̄ ̄ ̄\
|(_/ ゜(゚Д゚)ヽ
~ ~~ ~ ~ ~
このプログラムの使い方だよー
}
すごい(小並感)
おわりです。
参考と注釈
-
Day 24 — Subs are Always Better in multi-ples - Perl 6 Advent Calendar 2011
-
Day 2 – Interacting with the command line with MAIN subs -
Perl 6 Advent Calendar 2010 -
Day 6 – Running External Programs from Perl 6 - Perl 6 Advent Calendar 2014
-
How do I parse and validate command line arguments in Perl 6? - stackoverflow
-
panda
コマンドを参考にしたものです。 ↩