memo: perlでコマンドラインオプションを使う。__DATA__ トークンでソースコードにデータを埋め込む
Getopt
Recipe 15.1. Parsing Program Arguments
Getopt::Std, Getopt::Long を使うと、cのgetopt()関数のように、コマンドラインオプションを便利に扱うことができます。
Synopsys
use Getopt::Long; my ($xmin, $xrange, $ymin, $yrange, $zmin, $zrange, $delimiter, $help); GetOptions("xmin=i" => \$xmin, "xrange=i" => \$xrange, "ymin=i" => \$ymin, "yrange=i" => \$yrange, "zmin=i" => \$zmin, "zrange=i" => \$zrange, "delimiter|del=s" => \$delimiter, "h|help" => \$help);
解説
Getopt::Longの解説です。cのgetopt()のように、コマンドラインオプション(-o とか --prefix=foo など)を扱いやすくするモジュールです。GetOptions()関数に、"オプション名" => "結果を格納する変数のリファレンス"というハッシュを渡すと、オプションをパースして結果を変数に格納してくれます。またオプションの使い方に制約を持たせることもでき、例えば、"option=s"とすると、stringのパラメータを必ず渡さなければいけない(--option=foo のように呼び出す)という制約付きのオプションができて、守られてない場合はエラーを出してくれます。その他にもオプションを"|"で区切ることでorをになったりします。
Getopt::Longは複数文字のオプションを扱いますが、Getopt::Stdは一文字だけのオプションを扱います。例えば、getopt("a")とすると、その値が$otp_aに格納されます。
__DATA__
Recipe 7.6. Storing Files Inside Your Program Text
__DATA__トークンを使うと、スクリプト内にデータを直接埋め込むことができます。__DATA__は普通のファイルを扱うように処理できます。
Synopsys
for my $line () { print $line; } __DATA__ AAAAAAAAA BBBBBBBBB CCCCCCCCC
解説
__DATA__ 以降の文字列がデータとして扱われます。ループの部分で行っているように、普通のファイルのように扱うことができます。