この初版は、Lua 5.0 向けに書かれました。後々のバージョンについてもほとんど関連性がありますが、一部相違があります。
第 4 版は Lua 5.3 を対象としており、Amazon やその他の書店でお求めいただけます。
この本を購入することで、Lua プロジェクトを支援することにもなります。


22.2 – その他のシステムコール

os.exit 関数は、プログラムの実行を終了します。os.getenv 関数は、環境変数の値を取得します。変数名を受け取り、値のある文字列を返します。

    print(os.getenv("HOME"))    --> /home/lua
変数が定義されていない場合、呼び出しから **nil** が返されます。os.execute 関数は、システムコマンドを実行します。C の system 関数と等価です。コマンドを含む文字列を受け取り、エラーコードを返します。たとえば Unix と DOS-Windows では、新しいディレクトリを作成するために次のような関数を記述できます。
    function createDir (dirname)
      os.execute("mkdir " .. dirname)
    end
os.execute 関数は強力ですが、システム依存性も高くなります。

os.setlocale 関数は、Lua プログラムによって使用される現在のロケールを設定します。ロケールは、文化的または言語的な相違に敏感な動作を定義します。setlocale 関数は、ロケール名と、ロケールが影響する機能を指定するカテゴリという 2 つの文字列パラメータを取ります。ロケールには、6 つのカテゴリがあります。"collate" は文字列のアルファベット順を制御します。"ctype" は個々の文字のタイプ(たとえば文字とは何か)と大文字と小文字の間の変換を制御します。"monetary" は Lua プログラムには影響しません。"numeric" は数値の形式を制御します。"time" は日付と時刻の形式を制御します(つまり、os.date 関数)。そして、"all" は上記のすべての機能を制御します。デフォルトのカテゴリは "all" であるため、ロケール名を指定してのみ setlocale を呼び出すと、すべてのカテゴリが設定されます。setlocale 関数は、ロケール名、または失敗した場合(通常はシステムが指定されたロケールをサポートしていないため)は **nil** を返します。

    print(os.setlocale("ISO-8859-1", "collate"))   --> ISO-8859-1

"numeric" カテゴリは少し厄介です。ポルトガル語やその他のラテン系言語では、小数点の代わりにコンマを使用して小数点を表しますが、ロケールによって Lua が数値を解析する方法が変わることはありません(print(3,4) などの式は Lua ではすでに意味があるため)。そのため、コンマ付きの数値を認識できないが、ドット付きの数値も理解できないシステムができてしまう場合があります。

    -- set locale for Portuguese-Brazil
    print(os.setlocale('pt_BR'))    --> pt_BR
    print(3,4)                      --> 3    4
    print(3.4)       --> stdin:1: malformed number near `3.4'