Study 2 print文

printとは文字通り何かを表示(厳密に言うと出力)させる命令文です。
print文は初心者にとって最も理解しやすい命令文だと思います。

print '我輩は猫である';

このように記述してあれば、大概の人はこれが「我輩は猫である」と表示させているんだろうなということが推察できます。

このprint文にも色々と記述方法や決まりごとがあります。それを見ていきましょう。

まず以下の例文を見てください。

print '我輩は猫である';

記述方法は簡単です。printの後に半角スペースを入れその後に表示させたいデータを記述します。 注目すべきはシングルクォーテーション( ’)で囲んでいる点です。

print 我輩は猫である;

このようにするとエラーになります。
文や文字は必ず何かしらで囲んで上げなくてはなりません。
その何かしらには幾つかの方法があります。まず基本的な囲みを見てみましょう。

@ print '我輩は猫である';
A print "我輩は猫である";

@は先ほどと同じシングルクォーテーションで囲んでいます。
Aはダブルクォーテーションで囲んでいます。
printの前にある@Aは便宜上付けているだけで実際には記述しません。
最後のセミコロン( ; )はここで一つの命令文を終えるという決まりごとです。

先ほどのプログラムの結果は以下の通りです。

@ 我輩は猫である
A 我輩は猫である

同じかよ!とお思いになるかも知れません。確かにこれだと違いはありません。
では次の例を見てください。変数を入れた例です。

$data = '猫';
@ print '我輩は$dataである';
A print "我輩は$dataである";

まず $data という変数(箱のようなもの)に「猫」という単語を入れています。
この結果を見てみましょう。

@ 我輩は$dataである
A 我輩は猫である

お分かりでしょうか?
@は$dataそのものを表示しています。
Aは$dataの中身を表示しています。
このAのような出力方法を「変数展開する」と言います。
変数を入れた文を表示させる場合はダブルクォーテーションを使うんだという事を覚えておいてください。

では次に行きましょう。

@ print 'Ryu's Bar';
A print "Ryu's Bar";

文の間にシングルクォーテーションを使用している点に注目して下さい。
要は「Ryu's Bar」を表示させたいのですが、このままだと@はエラーになります。
@のプログラムはシングルクォーテーションからシングルクォーテーションまでを一つのデータだと解釈します。 それ故に間にシングルクォーテーションが入っていた場合、ここで文は終わりだなと判断してしまい、結果的にその後の文が解釈できずエラーとなります。
Aのプログラムはダブルクォーテーションからダブルクォーテーションまでを一つのデータだと判断していますので間にダブルクォーテーションが無い限りエラーになりません。

では間にどうしてもシングルクォーテーションやダブルクォーテーションを使用したい場合はどうすれば良いのか? 解法は以下の通りです。

@ print 'Ryu\'s Bar';
A print "今日は\"定休日\"";

お分かり頂けたでしょうか?前に「¥(バックスラッシュ)」を付けています。
¥を直前に付けた文字はそのものの意味を打ち消す作用があります。
もう少し簡単に言うと¥の次の文字は単なる文字でそれ以外の意味は無いという意味になります。
Perlではこの事を「¥でエスケープする」と言います。
¥そのものを表示したい場合は¥¥とします。

余談ですが、何故¥をバックスラッシュと呼ぶのか。
¥は文字通り1円2円の「円」です。当然日本でしか使用していません。
欧米のキーボードには¥はありません。 欧米では「 / (スラッシュ)」の丁度反対の形の文字(つまりバックスラッシュ)をエスケープに使用します。 日本ではバックスラッシュの代わりに¥マークを使用しているのでバックスラッシュと呼んでいます。

次に他の記述方法を見てみましょう。

$data = '我輩は猫である';
@data = ('我輩は','猫で','ある');
print $data;
print @data;

この場合、printするものは文ではなく変数や配列です。文は含んでいません。
printするものが変数や配列の場合はシングルクォーテーションやダブルクォーテーションで囲む必要はありません。
結果は両方とも「我輩は猫である」と表示します。

では次です。

$data = "我輩は猫である\n名前はまだ無い";
print $data;

文が少し長くなりましたが、この文は間に「¥n」があります。
これは改行を意味します。実行結果は以下のようになります。

我輩は猫である
名前はまだ無い

この時、気を付けなければならないのはダブルクォーテーションで囲むという事です。
シングルクォーテーションで囲むと¥nがそのまま表示されてしまい改行されません。
シングルクォーテーションで改行する場合は次のようにただ改行するだけです。

$data = '我輩は猫である
名前はまだ無い';
print $data;

次です。以下の例文をご覧下さい。

print <<"EOC";
我輩は猫である
名前はまだ無い
EOC

これはヒアドキュメントと呼ばれるもので、まとまった分量の文章を扱うのに便利です。
<<の次に来る文字列が再び来るまでその間を文章として認識します。
例の場合、再び「EOC」という文字列が現れるまでを一つの文章データとして扱います。
EOCの部分は任意の文字列で好きな名前を付ける事ができます。
EOCをダブルクォーテーションで囲むかシングルクォーテーションで囲むかは今までの例と同じ事です。 ダブルクォーテーションで囲めば間の文章は変数展開されます。

下記のようにしても同じ結果が得られます。

$data = <<"EOC";
我輩は猫である
名前はまだ無い
EOC
print $data;

この他にも以下のような記述方法があります。
シングルクォーテーションやダブルクォーテーションの代用です。

# シングルクォーテーションの代用
print q/我輩は猫である/; # 間に / があるとエラー
print q|我輩は猫である|; # 間に | があるとエラー
print q(我輩は猫である); # 間に ) があるとエラー
# ダブルクォーテーションの代用
print qq/我輩は猫である/; # 間に / があるとエラー
print qq|我輩は猫である|; # 間に | があるとエラー
print qq(我輩は猫である); # 間に ) があるとエラー

最後に次の例を見てください。

$data1 = '我輩は猫である';
$data2 = '名前はまだ無い';
@ print $data1.$data2;
A print $data1$data2;
B print "$data1$data2";
C print $data1,$data2;

@は間にピリオド「 . 」が入っています。これはデータとデータを繋ぐという意味があります。
結果$data1と$data2を繋いだものを表示します。
Aは変数が二つ並んでいますがこれはエラーになります。
Bのようにダブルクォーテーションで囲む必要があります。
Cのようにダブルクォーテーションを使用しない場合は、間にカンマ「 , 」を入れる事で表示させることが出来ます。これは先ほどのピリオドと似ていますが、解釈は少し違います。 ピリオドは二つのデータを繋ぐという命令ですが、カンマの場合は「and」という意味になります。$data1 & $data2を表示しろとなります。

@もBもCも同じように「我輩は猫である名前はまだ無い」を1行に表示します。

study1戻るstudy3


Copyright 2000-2003 Missing Link All Rights Reserved.