前節では標準入力からのデータ入力について見てきました。 ここでは、標準出力からの出力について紹介します。 と言ってもこれは今までにもう何度も何度もやってきたことです。
print関数はもう何度も使ってきたおなじみの関数だと思います。 今までは、
print "hogehoge";
という使い方をしてきましたが、実はこれは簡略化した使い方です。 print関数は、表示する文字列(またはカンマで区切った文字列リスト)のほかに出力先のファイルハンドルを受け取ります。 ですからホントは、
print STDOUT "hogehoge";
#標準出力のファイルハンドルはSTDOUTでしたね。
のように書きます。 ですが、最初のようにファイルハンドルを省略するとprint関数は標準出力へ文字列を出力します。
また複数の文字列を表示するには、それらをカンマで区切ってリストにします。
print "hogehoge", "harahoro", "gachoon";
さて、次のコードを見てください。
print (3 + 2) * 3;
上のコードの出力は15ではなく5です。 これはprint関数が、引数のリストを示すものとしてカッコを探し、閉じカッコの後のものは全て無視してしまうからです。 きちんと15を出力させるには、
print ((3 + 2) * 3); #15を出力
とします。
前節でも説明しましたが、出力する文字列リストを省略すると、print関数は特殊変数$_の中身を表示します。
while(<STDIN>){
print;
}
printf関数は、C言語をご存知の方にはなじみがあると思います。 Perlのprintf関数も、C言語の物と同じような働きをします。
printf "%10s", "hoge";
printf関数は出力する文字列(あるいは文字列のリスト)のほかに、その文字列をどんなフォーマットで出力するかを指定するフォーマット制御文字列を引数として受け取ります。 ここで「フォーマット」とは、「10進数として」出力するのか、「文字列として」出力するのかといったデータ型や、出力する位置などの情報のことです。 フォーマット制御文字列は次のような形をしています。
%m.nx
mとnは出力する場所(フィールド)のサイズです。 引数をどのような形で(10進数としてなのか、文字列としてなのか)出力するかによって解釈されます。 またこの部分は省略することもできます。 xはフィールドのデータ型です。 上の例では%10sというのがフォーマット制御文字列になります。 このうち10がフィールドのサイズを表していて、そのあとのsが、引数を「文字列として」表示しなさいというデータ型です。 ですから上のコードは、「hoge」という文字列を、サイズ10のフィールド内に右揃えで出力します。
hoge
次の表は、フォーマット制御文字列に指定できるデータ型の一覧です。
データ型 | 説明 |
---|---|
c | 文字 |
d | 10進数 |
e | 指数浮動小数点数 |
f | 固定小数点浮動小数点数 |
g | コンパクト浮動小数点数 |
ld | 10進長整数 |
lo | 8進長整数 |
lu | 符号なし10進長整数 |
lx | 16進長整数 |
o | 8進数 |
s | 文字列 |
u | 符号なし10進数 |
x | 16進数 |
X | 16進数(大文字) |
次にいくつか例を挙げましょう。まずは10進数から。
printf "%10d", 12345;
また次の例はスカラー変数の値を出力しています。
$pi = 3.14159;
printf "%5.2f", "$pi";
上の例では「3.14」と出力されます。 「%5.2f」の「5」はフィールドのサイズで、「2」は小数点以下の出力桁数です。 出力するフィールドのサイズが小さく、数値が入らない場合は、Perlが自動的に調整してくれます。
$pi = 3.14159;
printf "%10s %10d %5.2f", "hoge", 12345, "$pi";
printf "%-10s %-10d %-5.2f", "hoge", 12345, "$pi";
上のようにすることで、複数の文字列を出力することも出来ます。 また2行目のように、フィールドサイズに負の値を指定すると文字列を左寄せして出力します。
ここでは標準出力への出力についてお話しました。 この章の内容はすでにご存知の方も多いと思います。 次の章では、Perlの強力な武器の1つ、正規表現についてお話します。