私はperlが初めてです。//
perlの演算子の意味を教えてください。
5 に答える
定義演算子です。表現:
A // B
定義されている場合は を返しA
、そうでない場合は を返しますB
。
情報のソースが定義されていない場合、次のようなデフォルト値を取得するのに非常に役立ちます。
$actualBalance = $balanceFromBank // 0;
また:
$confirmation = $userInput // "N";
詳細については perlop ページの関連部分を参照し、将来の参照用にperlopのリンクを作成してください。Google 検索と句読点の Perl コードはうまく混ざり合わないからです :-)
//
演算子は論理的に定義されています-または。Perlopは言う:
Cには直接同等のものはありませんが、Perlの//演算子はそのCスタイルまたはに関連しています。実際、それは、真実ではなく左側の定義をテストすることを除いて、||とまったく同じです。したがって、EXPR1 // EXPR2は、定義されている場合はEXPR1の値を返し、そうでない場合はEXPR2の値を返します。(EXPR1はスカラーコンテキストで評価され、EXPR2は//自体のコンテキストで評価されます)。通常、これはdefined(EXPR1)と同じ結果ですか?EXPR1:EXPR2(ただし、三項演算子形式は左辺値として使用できますが、EXPR1 // EXPR2は使用できません)。これは、変数のデフォルト値を提供するのに非常に役立ちます。$aと$bの少なくとも1つが定義されているかどうかを実際にテストする場合は、defined($ a // $ b)を使用します。
要するに:その式が定義されている場合は左側(notのようにundef
)、または右側を返します。
my $foo = undef;
say $foo // 42;
# 42
my $bar = 'bar';
say $bar // 42;
# bar
Perl 5.10で実装された、いわゆるdefined-or
オペレーターです。ドキュメントの例:
次の式:
$a // $b
...は単に同等です
defined $a ? $a : $b
そして声明:
$c //= $d;
... の代わりに使用できるようになりました
$c = $d unless defined $c;
||
との//
違いは次のとおりです。
use 5.010;
my $rabbits = 0;
say $rabbits || 1; # 1, as 0 || 1 evaluates to 1
say $rabbits // 1; # 0, as 0 is not `undef`
それは「定義済み-または」です。$abc // "default"
と同等defined($abc) ? $abc : "default"
です。つまり、の左側に//
定義された値がある場合はその値が使用され、そうでない場合は右側が使用されます。
はdefined or
お気に入り、
my $a //= 3;
3を割り当てます$a
||
これは、単純に次の点で異なりor
ます。
my $a = "";
$a //= 3;
print "|$a|\n";
$a = "";
$a ||=5;
print "|$a|\n";
|5|
最初のケース$a
では(false値で)定義されているため、のみが出力されますが、2番目のケースでは、$a
評価するtrue
かどうかが重要になります。