do - 値を返すブロック、スクリプトの読み込み
doを使用すると、ブロック構文の場合は、最後に評価された値を返すブロックを作成することができます。文字列構文の場合は、ファイルを名を指定して、スクリプトを読み込むことができます。
# doブロック - 最後の値を返すブロック do { ... }; # do文字列 - スクリプトの読み込み do $file_name;
ブロックの構文と、文字列の構文は、機能がまったく異なるので注意してください。それぞれの構文について詳しく解説します。
最後の値を返すブロック - doブロック
doブロックを使用すると最後に評価された値を返すブロックを作成することができます。
# doブロック my $value = do { 1; 2; 3; };
上のように記述すると3が返され、$valueに3が代入されます。
普通にプログラミングするときには、この構文を使う理由は特にありませんが、慣例的に、ファイルの内容を一度に読み込みたい場合は、この構文が利用されます。
ファイルの内容を一度に読み込む
次の記述によって、ファイルの内容のすべて一度で読み込むことができます。
my $content = do { local $/; <$fh> };
この記述の詳しい解説は以下で行っています。
localについては「local - パッケージ変数を一時的に退避して復元」で解説しています。
スクリプトの読み込み - do文字列
do文字列の構文を使うことで、ファイルをPerlのソースコードとして読み込むことができます。
よく利用する方法として、設定ファイルをPerlで記述して読み込むことができます。
設定ファイルをPerlで記述する
設定ファイルはPerlで記述するのが便利です。
my $conf_file = "app.conf"; my $conf = do $conf_file or die qq/Can't load config file "$conf_file": $!$@/;
設定ファイルの内容です。
{ name => 'Foo', number => 9 }
ファイルの読み込みか解析に成功しなかった場合は未定義値が返却されます。ファイル名が存在しなかった場合は$!に、Perlのソースコードの読み込みに失敗した場合は$@にエラーの内容が設定されます。
設定ファイルはXMLやJSONで書くこともできますが、Perlで書くのが一番楽ですね。
do文字列の構文は、設定を記述したスクリプトを読み込むためだけに、利用するのが良いでしょう。モジュールを読み込みたい場合は、useかrequireを使うようにしましょう。