2011年2月26日土曜日

Perl 5 to 6 - MAINサブルーチン

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

これは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に仕様があります。

0 コメント:

コメントを投稿