必要な Perl コードの例を見つけましたが、認識できないものが含まれていました。
my $i //= '08';
私はどこにもこれへの参照を見つけることができません! 次と同じようです。
my $i = '08';
何か不足していますか?
必要な Perl コードの例を見つけましたが、認識できないものが含まれていました。
my $i //= '08';
私はどこにもこれへの参照を見つけることができません! 次と同じようです。
my $i = '08';
何か不足していますか?
//=
演算子は、 or '論理定義-or'演算子の代入演算子バージョンです。//
変数宣言のコンテキストではmy
、変数は最初は未定義であるため、割り当てと同等です(そして、として記述した方がよいでしょうmy $i = '08';
)。ただし、一般的には
$i //= '08';
の省略形です:
$i = (defined $i) ? $i : '08';
これは、Perl演算子(perldoc perlop
)の2つの場所(厳密には代入演算子セクションの下、および「論理定義-または」のセクションで完全に)に文書化されています。Perl5.10.0で追加されました。
簡単な答え:それはと同じ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';
これは「定義済みまたは」演算子です。
$i //= '08';
と同等です:
$i = defined($i)? $i: '08';
これはPerl5.10.0で導入されたものであり、古いバージョンではサポートされていません。
$i //= '08'
と同じ$i = defined($i) ? $i : '08'
です。$i ||= '08'
これは、に変換されるとほぼ同じ$i = $i ? $i : '08'
です。これで、変数をで宣言するとmy
、に設定されundef
ます。したがって、それは常に08
ブランチに従います。また、不思議に思うかもしれませんが、この//
演算子はPerlv5.10に登場しました。そのため、古いPerlではコンパイルエラーが発生します。
が定義され||
ているかどうかをチェックすることを除いて、それはほとんど同じです。$i