リストは非常に一般的な単語です。リスト演算子またはリスト値を参照している可能性があります。
コードにはコンマがないため、リスト演算子はありません。
コードにはリスト コンテキストがないため、リスト値はありません。
したがって、リストはありません
my $s = ();
括弧は決してリストを作成しません
(代入演算子の LHS にある場合は間接的にのみ。)
スカラーコンテキストで空リストを何と呼ぶか
Perl はこれを「スタブ」と呼びます (以下に示すように)。それがまさにその通りです。これは、文字通り何も配置できないコード内のプレースホルダーです。
スタブは「空の括弧」で表されるため、別の名前です。
私はそれを悪いコードと呼んでいます。を割り当てたい場合はundef
、割り当てundef
ます。
スカラー コンテキストのリストがリストの最後の要素を生成するという嘘があります。
いいえ、そうです。リスト値はスカラー コンテキストに存在できないため、リスト演算子はそのままです。
リスト演算子別名コンマ演算子は、スカラー コンテキストでリストの最後の要素を返します。
以下を比較してください。リストの言及なし:
>perl -MO=Concise -e"my $s = ();"
6 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 1 -e:1) v:{ ->3
5 <2> sassign vKS/2 ->6
3 <0> stub sP ->4
4 <0> padsv[$s:1,2] sRM*/LVINTRO ->5
-e syntax OK
リストの記載あり
>perl -MO=Concise -e"my @a = ();"
7 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 1 -e:1) v:{ ->3
6 <2> aassign[t2] vKS ->7
- <1> ex-list lK ->4
3 <0> pushmark s ->4
- <0> stub lP ->-
- <1> ex-list lK ->6
4 <0> pushmark s ->5
5 <0> padav[@a:1,2] lRM*/LVINTRO ->6
-e syntax OK
...そして、括弧とは何の関係もありません
>perl -MO=Concise -e"my @a = 's';"
8 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 1 -e:1) v:{ ->3
7 <2> aassign[t2] vKS ->8
- <1> ex-list lK ->5
3 <0> pushmark s ->4
4 <$> const[PV "s"] s ->5
- <1> ex-list lK ->7
5 <0> pushmark s ->6
6 <0> padav[@a:1,2] lRM*/LVINTRO ->7
-e syntax OK