拙著「FXはチャートで勝つ!」が発売されました。
FX(外国為替証拠金取引)でのチャートの読み方を解説しています。
自由国民社刊で、定価1,728円(消費税込み)です。
MTでPerlを学ぶ(その4・変数展開とヒアドキュメント)
「MTでPerlを学ぶ」の第4回として、文字列を扱う際に便利な「変数展開」と「ヒアドキュメント」をお話します。
1.変数展開
前回、文字列を表す方法として、「'」で囲む書き方と「"」で囲む書き方があることをお話ししました。
その際に、両者の違いはエスケープシーケンスが変換されるかどうかと述べました。
それとともに、もう1つの違いとして、「変数展開が行われるかどうか」という点もあります。
変数展開というのは、文字列中に書いた変数が、その変数の値に置き換えられることを指します。
「"」で文字列を囲むと、変数展開が行われます。
一方、「'」で文字列を囲んだ場合は、変数展開は行われません。
例えば、以下のようなプログラムを考えてみます。
$name = 'Taro'; $msg = "Hello, $name"; print $msg;
2行目の文を見ると、文字列の中に「$name」があります。
この「$name」は、変数$nameの値に置き換えられます。
上のプログラムでは、変数$nameには「Taro」という文字列を代入していますので、変数$msgには「Hallo, Taro」が代入されます。
2.ヒアドキュメント
プログラムの中で、改行を含む長い文字列を扱うこともよくあります。
その場合、文字列を「"」で囲み、「\n」のエスケープシーケンスで改行を表すことができます。
例えば、以下のように書くことができます。
$a = "This is a pen.\nThat is a dog.";
ただ、この書き方だと、長い文字列を表すには面倒ですし、改行の位置を把握しにくいです。
このようなときに便利なのが、「ヒアドキュメント」(here document)という書き方です。
ヒアドキュメントは、「<<識別子;」と「識別子」の間に書いた文字列を、改行も含めてそのまま扱うことができる機能です。
識別子は、大文字の英単語で表すことが一般的です。
例えば、上にあげた例をヒアドキュメントで書くと、以下のように書くことができます。
識別子に「HERE」を使っていますが、HERE以外の単語でも構いません。
$a = <<HERE; This is a pen. That is a dog. HERE
3.ヒアドキュメントとエスケープシーケンス/変数展開の併用
ヒアドキュメントの中で、エスケープシーケンスや変数展開を使うこともできます。
例えば、以下のプログラムを実行すると、ヒアドキュメント内の「$name」は変数$nameの値(Taro)に置き換えられます。
したがって、変数$msgの値は「Hello, Taro(改行)Nice to meet you.」になります。
$name = 'Taro'; $msg = <<HERE; Hello, $name Nice to meet you. HERE print $msg;
なお、ヒアドキュメントの中でエスケープシーケンスや変数展開を行わないようにしたい場合、「<<識別子;」の識別子を「'」で囲みます。
例えば、上のプログラムの2行目を「$msg = <<'HERE';」に変えると、変数展開は行われなくなります。