入出力

■ 画面に文字や値を書き出す(print)

◆ 文字や値の書き出し

画面に文字や値を書き出すには print() を用います。最後の \n は改行を意味しています。

inout1.pl
print "Hello world!!\n";

実行結果は次のようになります。

Hello world!!

CGI の場合は、print の結果は画面ではなく、ブラウザのウィンドウに表示されます。


ひとくちメモ

Perl では多くの場合、関数の括弧を省略することができます。例えば、print("...") を print "..." と記述することができます。

■ 値を書式付きで書き出す(printf)

◆ 書式付き書き出し

文字や値を、桁数などの書式を指定して出力するには、printf()を用います。

inout2.pl
$year = 1999;
$mon = 1;
$mday = 1;
print "今日は $year/$mon/$mday です。\n";
printf("今日は %04d/%02d/%02d です。\n", $year, $mon, $mday);

実行結果は次のようになります。

今日は 1999/1/1 です。
今日は 1999/01/01 です。
◆ 説明

printf(format, arg...) は、フォーマット(書式) format に従って文字列や数値を表示します。最初の %04d が $year に、次の %02d が $mon に対応します。%04d は10進数値(decimal)を、0埋め4桁で表示することを意味します。他にもいろいろな書式を指定することができます。(→ printf のフォーマット一覧

◆ パーセント(%)を書き出す

パーセント(%)文字を書き出すには、%%とします。下記の例では、%d が 85 に置換され、%% が % に置換されて、"確率は 85% です。" と表示されます。

$num = 85;
printf("確率は %d%% です。\n", $num);
◆ 関連情報

■ 複数行をまとめて書き出す(<<)

◆ ヒアドキュメント

複数行をまとめて書き出すには、ヒアドキュメント という技術を用いると便利です。ヒアドキュメントでは、文字列を「ここから、ここまで」のように指定します。下記の例では、<<END_OF_DATA から END_OF_DATA までの間の行を書き出します。

inout3.pl
print <<END_OF_DATA;
Content-type: text/html

<html>
<head><title>TEST</title></head>
<body>This is TEST page.</body>
</html>
END_OF_DATA

実行結果は次のようになります。

Content-type: text/html

<html>
<head><title>TEST</title></head>
<body>This is TEST page.</body>
</html>

<< の次には終了キーワードを記述します。終了キーワード END_OF_DATA は EOD でも DATA_NO_OWARI でも好きな名前で構いません。最初の END_OF_DATA の後ろにはセミコロン(;)を忘れないように、最後の END_OF_DATA の前後にはスペースを空けず、最後にセミコロン(;)もつけないようにしてください。

◆ ヒアドキュメントによる変数代入

ヒアドキュメントは文字列の書き出しだけではなく、変数代入に用いることもできます。(→ 複数行にわたる文字列を代入する

■ ヒアドキュメントの用法

◆ ヒアドキュメントの用法

ヒアドキュメントにおいて、終了キーワードをダブルクォート(")で囲むと、複数行文字全体がダブルクォートで囲まれたように振舞います。シングルクォート(')、バッククォート(`)で囲む場合も同様です。シングルクォートでは変数の展開が抑制され、バッククォートでは文字列をコマンドとして実行します。

inout4.pl
$xx = "ABC";

print <<"END_OF_DATA";    # print "これは $xx です。"; と同じ
これは $xx です。
END_OF_DATA

print <<'END_OF_DATA';    # print 'これは $xx です。'; と同じ。
これは $xx です。
END_OF_DATA

print <<`END_OF_DATA`;    # print `netstat -a` と同じ。
netstat -a
END_OF_DATA

実行結果は次のようになります。

これは ABC です。
これは $xx です。

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    pc2:1026               MYPC2:0                LISTENING
  TCP    pc2:1028               MYPC2:0                LISTENING
   :        :                      :                       :

クォートを省略した場合はダブルクォートと同じ動きになります。

■ キーボードからの入力を得る(<>)

◆ 入力を得る

キーボードからの入力を得るには、<> を用います。

inout5.pl
print "Input your name: ";
$name = <>;
print "Your name is $name\n";

実行例を下記に示します。

% perl inout5.pl
Input your name: tanaka
Your name is tanaka
◆ 説明

<> は、<STDIN> の STDIN を省略した形式です。STDIN は 標準入力 を示すファイルハンドルです。$moji = <>; は、キーボードから入力された文字を1行分読み取り、変数 $moji に代入します。CGI の場合はキーボードからの入力はできないので、この形式は用いません。

◆ 関連情報

Copyright (C) 2002 杜甫々