33

必要な Perl コードの例を見つけましたが、認識できないものが含まれていました。

my $i //= '08';

私はどこにもこれへの参照を見つけることができません! 次と同じようです。

my $i = '08';

何か不足していますか?

4

5 に答える 5

56

//=演算子は、 or '論理定義-or'演算子の代入演算子バージョンです。//

変数宣言のコンテキストではmy、変数は最初は未定義であるため、割り当て同等です(そして、として記述した方がよいでしょうmy $i = '08';)。ただし、一般的には

$i //= '08';

の省略形です:

$i = (defined $i) ? $i : '08';

これは、Perl演算子(perldoc perlop)の2つの場所(厳密には代入演算子セクションの下、および「論理定義-または」のセクションで完全に)に文書化されています。Perl5.10.0で追加されました。

于 2012-12-12T19:00:17.000 に答える
7

簡単な答え:それはと同じmy $i = '08';です。


まず、見てみましょう$i //= '08';

EXPR1 //= EXPR2;

と同じです

EXPR1 = EXPR1 // EXPR2;

EXPR1が1回だけ評価されることを除いて。便利な書き方です

EXPR1 = EXPR2 if !defined(EXPR1);

Perl演算子のドキュメントについては、 perlopを参照してください。


に戻るmy $i //= '08';。つまり、

my $i;
$i = '08' if !defined($i);

ただし、$i常に未定義になります。書く方がはるかに良いでしょう

my $i = '08';
于 2012-12-12T19:05:20.730 に答える
6

これは「定義済みまたは」演算子です。

$i //= '08';

と同等です:

$i = defined($i)? $i: '08';

これはPerl5.10.0で導入されたものであり、古いバージョンではサポートされていません。

于 2012-12-12T19:01:52.777 に答える
5

$i //= '08'と同じ$i = defined($i) ? $i : '08'です。$i ||= '08'これは、に変換されるとほぼ同じ$i = $i ? $i : '08'です。これで、変数をで宣言するとmy、に設定されundefます。したがって、それは常に08ブランチに従います。また、不思議に思うかもしれませんが、この//演算子はPerlv5.10に登場しました。そのため、古いPerlではコンパイルエラーが発生します。

于 2012-12-12T19:03:45.680 に答える
4

が定義され||ているかどうかをチェックすることを除いて、それはほとんど同じです。$i

于 2012-12-12T19:01:31.280 に答える