フリップフロップオペレーター/読み取りラインカウンターの質問
質問
これを読んでいます Perl:1からN(Windows)までの行を抽出します フリップフロップオペレーター/読み取り系カウンターの部分がわかりませんでした。
perl -nE 'say $c if $c=1..3' my_file
1
2
3E0
誰かが私にこの出力がどこから来たのかをもっと詳細に説明できますか?
解決
引用する Perlop:
スカラーの文脈では、
..
「ブール値を返します。オペレーターはフリップフロップのように双安定しており、ラインレンジ(コンマ)オペレーターをエミュレートします。 sed, awk, 、およびさまざまな編集者。各 "..
「オペレーターは、それを含むサブルーチンへの呼び出しを介して、独自のブール状態を維持します。左オペランドが誤っている限り、それは偽です。左オペランドが真であると、範囲オペレーターは右オペランドが真であるまで真実のままです。範囲演算子が再び偽になります。次に範囲演算子が評価されるまで偽りになりません。同じ評価で適切なオペランドをテストし、それが真実になりました( awk)、しかし、それはまだ一度真実に戻ります。次の評価まで、適切なオペランドをテストしたくない場合、 sed, 、3つのドットを使用するだけです(」...
「)2つではなく、他のすべての点で、」...
「振る舞います」..
「します。右オペランドは、オペレーターが「偽」状態にある間は評価されず、オペレーターが「真の」状態にある間、左オペランドは評価されません。優先順位は少し低いです
||
と&&
. 。返される値は、falseの空の文字列、またはtrueのシーケンス番号(1で始まる)です。シーケンス番号は、遭遇する各範囲のリセットです。 範囲内の最終シーケンス番号には、文字列「E0」が追加されています, 、その数値には影響しませんが、エンドポイントを除外する場合は、検索するものを提供します。シーケンス番号が1より大きくなるのを待つことで、開始点を除外できます。どちらかのスカラーのオペランドの場合」
..
「オペランドが等しい場合、オペランドは真実と見なされるという一定の表現です(==
)現在の入力線番号($.
変数)。
(強調が追加されました)