![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA38883224bQLou0E_uD-mnT6QMzHhq9J5SEdsmmGfltoASe0k-Sl6ZqmjEOX-IdStuQV343lNod7O5cX8YHnhKmoHTVmfR_6UcTVLiYKpm20_CgGGyk2ux5IPfIb4DDNstOKMcA/s200/Programming-republic-of-perl.png)
perl で、リストの要素を変数に代入する場合は次のように記述します。
$ perl
($a, $b, $c) = (1, 2, 3);
print $a, "\n";
print $b, "\n";
print $c, "\n";
^D1
2
3
$
とてもスマートにできます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMYraURKda9dQ_gp2QjhBHLz5-IRuW3AgVWPfs2g_DY9Fr8qnpdhiPHQUwNDcKiyHUOKn4dUnFUMM_WDJJSiPnQ6i2PONa2pPNf8hpzSNwrSXi_YkG1YPhZwYHIXT_jdGtEQct6A/s200/logo64.png)
Tcl の場合だと次のようにします。perl の表現に比べると、とても武骨です。
$ tclsh
% set z [list 1 2 3]
1 2 3
% set a [lindex $z 0]
1
% set b [lindex $z 1]
2
% set c [lindex $z 2]
3
% exit
$
もっと簡単にできないかと考えたところ、名案が浮かびました。perl ほどではありませんが…。
$ tclsh
% foreach {a b c} [list 1 2 3] {}
% puts $a
1
% puts $b
2
% puts $c
3
% exit
$
考えてみると、だれか他の人の Tcl コードで既にこのように使われていた気がします。その時にはちゃんと理解できず見逃していたのでしょう。
lassignで良いのでは?
返信削除はい、その通りです。コメントをありがとうございます。認識不足でした。
返信削除