マスタリングPerl (11章 Perlプログラムの設定)

Perlプログラムを設定する際に、ユーザにプログラム自体を開かせ変数を修正させるようなことはしてはならない。

設定セクションを別ファイルに切り出す

設定セクションを別ファイルに置き、メインプログラムに引き込む。
設定セクションのコードは、別ファイルにスコープを持つことになるため、レキシカル変数は使えない。

### config.pl
# レキシカル変数は使えない
#!/usr/bin/perl

use strict;
use warnings;

BEGIN { requier "config.pl"; }

環境変数

シェルに設定されている環境変数Perlプログラムで使用する。
Perl環境変数を使用するには、%ENVハッシュを利用する。

$ENV{REQUEST_METHOD};
  • 特別な環境変数
    • PERL5OPT : シバン行でスイッチを指定したかのように動作を変更できる。
    • PERL5LIB : 指定したディレクトリをモジュール検索パスに追加する。
  • 一時的に環境変数を設定する
    • 以下のようにPerlプログラムを実行すると、一時的に環境変数を設定することができる。設定した環境変数は、$ENV{DEBUG}のように参照できる。
$ DEBUG=1 ./program.pl

コマンドラインスイッチ

プログラム実行時に引数を指定し、プログラムの動作に影響を与える。

  • -sスイッチ
    • 引数にシングルハイフン(-)、ダブルハイフン(--)を指定しても使える。
    • 値はあってもなくてもよい。
$ perl -s ./program.pl -a=1 -b=2
### $a, $bとして、値を参照できる
### 値を指定しない場合は、"1"が設定される
  • Getopt::Std : 値の指定が可能な、単一文字のスイッチを扱う
    • getopt : 個々のスイッチが値を持っていることを期待している。引数を設定しない場合には、値を設定しない。
#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Std;

getopt('dog', \ my %opts);   # 引数"-d", "-o", "-g"の値を%optsハッシュに格納する

print "$opts{d}\n";
print "$opts{o}\n";
print "$opts{n}\n";

# "perl ./program.pl -d 1"のように実行する
    • getopts : 引数を設定しない場合は、値に1を設定する。コードはgetoptと同じように書く。
  • Getopt::Long : 単一文字のスイッチ、単一文字のスイッチのバンドル、ダブルハイフンのスイッチを扱う
    • GetOptins関数にキー/値ペアのリストを提供する。キーはスイッチ名、値はGetOptionsが値を置く変数のリファレンスを示す
#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Long;

my $opts = GetOptions(
  'debug|d'   => \ my $debug,
  'verbose|v' => \ my $verbose,
);

# "|"を使って、スイッチのエイリアスを作成できる

設定ファイル

ユーザに変更させる設定値を、設定ファイルに切り出す。

  • ConfigReader::Simple
    • "キー = 値"や"キー 値"のようなシンプルなフォーマットの設定ファイルを読み込める。
  • Config::IniFiles
    • Windowsのiniファイルのようなフォーマットの設定ファイルを読み込める。
  • Config::Scoped
    • ネスト化したセクション、Perlコード評価、複数値キーが使用できる。
  • AppConfig
    • 設定ハンドラの統合インタフェースを提供する。
    • コマンドラインオプション、設定ファイル、環境変数CGIパラメータなどが利用できる。
  • Mac::PropertyList
    • Mac OS Xのplistフォーマットを扱える。
  • Config::ApacheFile
    • Apache設定フォーマットを扱える。

プログラムの名前により動作に影響を与える

シンボリックリンクやハードリンク等で、プログラムの別名を設定し、ファイル名に基づいて動作に影響を与える。
プログラム名は、Perl変数"$0"に格納される。

インタラクティブと非インタラクティブなプログラム

  • STDOUT, STDINをチェックする
  • IO::Interactive

PerlのConfig

Configモジュールで、perlバイナリ用のコンパイルオプションを含んだハッシュをエクスポートできる。