これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 14 - The MAIN subの日本語訳です。
原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。
本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。
Original text: Copyright© 2008-2010 Moritz Lenz
Japanese translation: Copyright© 2011 SATOH Koichi
NAME
"Perl 5 to 6" Lesson 14 - MAINサブルーチン
SYNOPSIS
# ファイル doit.pl
#!/usr/bin/perl6
sub MAIN($path, :$force, :$recursive, :$home = '~/') {
# do stuff here
}
# コマンドライン
$ ./doit.pl --force --home=/home/someoneelse file_to_process
DESCRIPTION
サブルーチン呼び出しと典型的なUNIXプログラムのコマンドラインからの起動は、見た目にはとてもよく似ています: 位置的な引数やオプション、名前付き引数を与えられます。
この類似点のおかげで、Perl6はコマンドラインを処理してサブルーチン呼び出しに変換してくれます。
スクリプトは通常通り実行され(この時点で@*ARGS
に格納されているコマンドライン引数を書き換えることもできます)、その後もし存在すればMAIN
サブルーチンが呼び出されます。
コマンドライン引数がMAIN
サブルーチンの形式的パラメータにマッチしない場合、自動的に生成されたUsageが表示されます。
コマンドラインオプションはサブルーチン引数に以下のようにマップされます:
-name :name
-name=value :name<value>
# <...>はqw(...)のようなものでしたね
--hackers=Larry,Damian :hackers<Larry Damian>
--good_language :good_language
--good_lang=Perl :good_lang<Perl>
--bad_lang PHP :bad_lang<PHP>
+stuff :!stuff
+stuff=healty :stuff<healthy> but False
$x = $obj but False
は$x
が$obj
のコピーではあるけれど、真理値コンテキストではBool::False
になるという意味です。
これによって、単純な(そしていくつかの単純でない)ケースでは外部のコマンドライン解析器は必要なくなり、単にMAIN
を使えば良くなりました。
MOTIVATION
この背景にある動機は極めて明確です: 簡単なことは容易に、よく似たことは同様に、そしてほとんどのコマンドライン処理を一行(MAIN
のシグネチャ)に。
SEE ALSO
http://perlcabal.org/syn/S06.html#Declaring_a_MAIN_subroutineに仕様があります。
コメント
コメントを投稿