evalではstrict 'refs'でも展開(?)できる
こちらを見て。
404 Blog Not Found:perl - 実践で役立たないPerl正規表現 完全解説
そうか、evalって重ねられるんだと思ってやってみたらできた。
use strict; use warnings; my $aaa = 123; my $bbb = '$aaa'; my $ccc = '$bbb'; say eval eval eval $ccc; #=> 123
あれ?、なんかこれって use strict; でできないんじゃなかったかと思ってたんだけど…。
use strict; use warnings; our $aaa = 123; our $bbb = 'aaa'; our $ccc = 'bbb'; say ${${$ccc}};
Can't use string ("bbb") as a SCALAR ref while "strict refs" in use at - line 8.
うんやっぱりそうだ。
ちなみに my だとシンボルテーブルに乗らないからできない。
no strict 'refs' で打ち消せばいける。
use strict; no strict 'refs'; use warnings; our $aaa = 123; our $bbb = 'aaa'; our $ccc = 'bbb'; say ${${$ccc}}; #=> 123
なんか eval () って何でもありだなー。
黒魔術っていうんですかね、こういうのを。