何故か今日もお風呂で色々考えてしまった。代表的なのが下記の話。
Windows 上で動作する PowerShell で書かれたスクリプトで、$outdata に "foo/bar" などの値が入っていた場合、$head = "foo", $bottom = "bar" などに「/」で分割するコードがある。(会社で私とは別の人が書いたサンプルプログラム)
$tmp = $outdata -split "/"
$head = $tmp[0]
$bottom = $tmp[1]
というコードがあって、ついつい、
$head, $bottom = $outdata -split "/"
と直してしまったが、これ $outdata が少し特殊な「foo/bar/baz」の場合に $head = "foo", $bottom = "bar baz" (2番目以降がすべて $bottom に入る) になってしまうので、元のコードとロジックが変わってしまうんだよな。
$head, $bottom = ($outdata -split "/")[0,1]
ならどうだ! と念のため AI に聞いてみたら、OK らしい。他にも、
$head, $bottom, $null = $outdata -split "/"
という書き方もある。元のコードに類似なのは、先ほどの [0,1] なんですが、こちらは split したデータの 3 つ目以降は捨てることが明示的にわかってシンプルかな。
冒頭で書いたように、これ PowerShell で動作させるコードなんだけど、このあたりの実装のバリエーションって、昔 Perl (パール) という言語でも似たようなコードを書いたことがあり、3 番目以降があった場合の挙動について気が付いたのでした。
…なんてことを、風呂に浸かりながら考えるので長風呂になってしまうのですがね…。![]()