文字列に変数・式を埋め込むには

文字列リテラルの中で変数展開をする方法。これができない言語では、sprintfのようなものを使うしかないかもしれない。

PHP

"http://$host/$path"
"${str}_foo"
"Hello, {$arr[1]}!"

Ruby

"http://#{host}/#{path}"
"Hello, #{arr[1]}!"

Perl

"http://$host/$path"
"Hello, $arr[1]!"

PHP

"" で囲む文字列リテラルやヒアドキュメントでは中に変数を埋め込むことができる。

"http://{$host}/{$path}"

配列の要素への参照もそのまま埋め込むことができる。

$arr = array(10, 20, 30);
$map = array('a' => 100, 'b' => 200);

echo "$arr[1]\n"; # => 20
echo "$map[a]\n"; # => 100

ただ、配列のキーに文字列をそのまま書くと PHP Parse error が発生する。

// 以下は PHP Parse error
// echo "$map['a']\n";

オブジェクトのフィールドへの参照も埋め込むことができる。

echo "{$obj->field1}\n";

変数名のあとになお英数字やアンダースコアなどが続く場合は変数名を {} で囲んで変数名の部分を明示する。後ろに日本語が続く場合でも {} が必要みたい。

"${str}_foo"
// または
"{$str}_foo"

{}ので囲めば変数名だけでなく、複雑な式も入れることができるが、 {}の中の最初の文字が $ である必要がある。

Ruby

Rubyでは式展開といい、変数に限らず、任意の式を文字列に埋め込むことができる。

"" で囲んだ文字列やヒアドキュメントは、 #{...} を使って式を評価した結果を文字列に埋め込むことができる。

配列の%W記法や%I記法でも式展開される。

require 'date'

puts "It is #{DateTime.now} now."

式展開 | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fliteral.html#exp

Perl

"" で囲む文字列では中に変数を埋め込むことができる。 ` ` で囲むコマンドにも埋め込むことができる。

$ または @ で始まる変数が展開される。% は展開されないみたい。

"http://$host/$path"

ハッシュの要素の参照もそのまま書ける。

"HOME: $ENV{HOME}"

ハッシュが書ければもちろん配列の要素の参照もそのまま書ける。

my @a = ('AA', 'BB');
print "$a[0]\n";
# => AA

レファレンスでも要素を参照できる。

my $a = ['AA', 'BB'];
print "$a->[0]\n";
# => AA

変数名の後に半角英数字などの変数名になりうる文字や { そのものが続く場合は、変数の部分を {} で囲むことで、後続の文字列と区別する。

my %a = (A => 1);
print "${a{A}}{A}\n";
# => 1{A}

sh (シェルスクリプト)

"" で囲む文字列では中に変数を埋め込むことができる。

$ で始まる部分が変数に展開される。

変数名の後に半角英数字などの変数名になりうる文字が続く場合は、変数の部分を {} で囲むことで、後続の文字列と区別する。

"$VAR/hoge"
"${VAR}_hoge"

"{$VAR}"$ を中括弧の中に書くのはダメ。

JavaScript

このような機能はたぶんない。

CoffeeScript

"" で囲む文字列では中に式を埋め込むことができる。

"http://#{host}/#{path}"
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。