二重引用符内の変数の展開に関して
二重引用符内に変数名があったら、展開してくれることはつい最近勉強した。たとえば、
my $n = 42; print "$n\n";
っていうコードがあったとき、ちゃんと42と改行文字を表示してくれるってことは、
- 現在の環境から識別子 $n を検索し、42という数値を見つけ出す
- それを文字列に変換
- 改行文字と連結
- printする
- (゚д゚)ウマー
という手順を踏んでいるものと思えるんだけど、識別子を環境から探す、ってことは即ち与えられた式をえばっていると言えないだろうか。どんだけえばってくれるか、ちょっと調べてみたくなったので実験。
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実行してるのかな?もしそうなら、二重引用符内の変数の展開って結構重い処理なのかな?