ポイントに関して

画像

perlには、ドットのみで構成される演算子がいくつかあります。 そのような演算子をいくつ指定できますか?



それらの5つがあります。 通常、perlプログラマーは2つまたは3つの名前を付けることができます。



それらを順番に見てみましょう。



ワンポイント。





誰もが1つの点からオペレーターを知っています。 これは、文字列の連結、連結です。 より正確には、これは両方のオペランドを文字列に変換し、その後に組み合わせることです。



my $string = 'one string' . 'another string'; # $string  'one stringanother string'
      
      







オペランドの1つにスカラーコンテキストで結果を返すように強制すると便利な場合があります。



 say "Time: ", localtime; #    say "Time: " . localtime; #        
      
      







2行のコードには少し違いがありますが、出力には大きな違いがあります。



ワンポイントで終了しました。



二点





2つのポイントを使用することは、すでにより興味深いことです。 実際、2つのポイントは2つの異なる演算子です。 それらの使用方法に依存します。



ほとんどは、任意の間隔から値の配列を生成する演算子として「..」演算子に精通しています。



 my @numbers = (1 .. 100); my @letters = ('a' .. 'z');
      
      







ループで使用するのも便利です。



 do_something() for 1 .. 30000;
      
      







perlの古いバージョンでは、このために一時的な配列が作成されたため、このようなループは大きな負荷を発生させる可能性がありました。 現在、このような問題はありません。



そのため、リストのコンテキストでは、2つのポイントが範囲演算子です。 しかし、スカラーでは-これはswitchステートメント(フリップフロップ)です。 falseとtrueの2つの値を切り替えるため、そう呼ばれます。 これはfalseで始まり、次のスイッチでtrueに変わり、その後再びfalseに変わります。



演算子の状態を切り替えるには、そのオペランドを計算して呼び出します。 例。

次の形式のテキストファイルを処理しているとします。



スタート

ここにテキストがあります

ここにテキスト

終了

不要なテキスト

ゴミ

スタート

再び希望のテキスト

ここにテキスト

終了



必要なテキストはSTARTとENDの間にあり、残りはゴミです。



通常、学校の処理方法は次のとおりです。



 my $process_this = 0; while (<$file>) { $process_this = 1 if /START/; $process_this = 0 if /END/; process_this_line($_) if $process_this; }
      
      







「..」演算子を使用すると、同じプログラムは次のようになります。



 while (<$file>) { process_this_line($_) if /START/ .. /END/; }
      
      







switchステートメントは、左のオペランド(/ START /)がtrueを返すまでfalseを返します。 次に、スイッチはtrueに切り替わり、右側のオペランド(/ END /)がtrueを返すまでそれを返します。 その後、falseに切り替わり、ループが繰り返されます。



別のトリック。 ファイルの20行目から40行目のみを処理する必要があるとします。 最後に開いたファイルから読み取られた現在の行番号は、特殊変数$に含まれています。

switchオペランドが定数の場合、$。の内容と比較し、行番号が一致すると切り替わります。 したがって、ファイルの20〜40行の処理は非常に簡単です。



 while (<$file>) { process_this_line($_) if 20 .. 40; }
      
      







三点





3点演算子はyada-yada(おそらくロシア語で「blah blah」)と呼ばれ、perl 5.12で追加されました。

厳密に言えば、オペランドを持たないため、これはおそらく演算子ではなく言語のディレクティブです。

まだ書かれていないコードを置き換えることを目的としています。



 sub reverse_polarity { # TODO:     ... }
      
      







プログラマーは長い間コードにそのようなマークを付けてきました。 そして伝統的に、省略記号はまだ書かれていないものを意味します。 しかし、これらの3つのポイントを実際にコードに入力することができ、コンパイルして機能します。

ポイントは、空の関数をそのままにしておくと、何も返さずに静かに実行されることです。 また、コード内の省略記号は、perlに特別な警告「Unimplemented at _file_ line ##」を発行させます。 そのようなリマインダー。



しかし、実際には、perlには古代から省略記号の形式の別の演算子があります。 これは、フリップフロップswitchステートメントの別のバージョンです。



2点切り替え演算子は、最初に左のオペランドの値を計算し、真の場合は切り替えてから、すぐに右の値を計算します。 そして、それも真実であれば、すぐに元に戻ります。 3つのポイントの演算子は、右側のオペランドの値をすぐにはチェックしないため、少なくとも1回の実行が保証されます。



もちろん、これは不要な複雑さのように思えますが、場合によっては、この動作が役立つかもしれません。 しかし、3ポイントのフリップフロップ演算子について知っている人はほとんどいないという事実から判断すると、それはほとんど必要ありません。



したがって、ここには、連結、範囲、フリップフロップ、何とか、もう1つのフリップフロップという5つの演算子があります。



All Articles