二重引用符内の変数の展開に関して

二重引用符内に変数名があったら、展開してくれることはつい最近勉強した。たとえば、

my $n = 42;
print "$n\n";

っていうコードがあったとき、ちゃんと42と改行文字を表示してくれるってことは、

  1. 現在の環境から識別子 $n を検索し、42という数値を見つけ出す
  2. それを文字列に変換
  3. 改行文字と連結
  4. printする
  5. (゚д゚)ウマー

という手順を踏んでいるものと思えるんだけど、識別子を環境から探す、ってことは即ち与えられた式をえばっていると言えないだろうか。どんだけえばってくれるか、ちょっと調べてみたくなったので実験。

use strict;
use warnings;

my @week = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
my $index = 3;

# case 01
#   変数名の検索(スカラー)
print "$index\n";

# case 02
#  変数名の検索(配列)
print "@week\n";

# case 03
#  変数名の検索(配列)
#  添字から要素を特定
print "$week[3]\n";

# case 04
#  変数名の検索(配列)
#  変数名の検索(スカラー)
#  添字から要素を特定
print "$week[$index]\n";


# case 05
#  変数名の検索(配列)
#  -演算を実行
#  添字から要素を特定  
print "$week[7-1]\n";  


# case 06
#  変数名の検索(配列)
#  関数を実行
#  -演算を実行
#  添字から要素を特定  
print "$week[scalar(@week)-1]\n";

ここまで全部大丈夫。ほぇー。だから何だよ、って感じですが。はい。Perlの関数の定義の仕方はまだ習ってないけど、関数の定義まで書けたりするのかな。ちゅーりんぐかんぜんだったり...いや、なんでもないです。

evalあるじゃないか

調べてみたらPerlにもevalあるのね。これはeval実行してるのかな?もしそうなら、二重引用符内の変数の展開って結構重い処理なのかな?