0

私はperlが初めてです。//perlの演算子の意味を教えてください。

4

5 に答える 5

10

定義演算子です。表現:

A // B

定義されている場合は を返しA、そうでない場合は を返しますB

情報のソースが定義されていない場合、次のようなデフォルト値を取得するのに非常に役立ちます。

$actualBalance = $balanceFromBank // 0;

また:

$confirmation = $userInput // "N";

詳細については perlop ページの関連部分を参照し、将来の参照用にperlopのリンクを作成してください。Google 検索と句読点の Perl コードはうまく混ざり合わないからです :-)

于 2012-10-16T09:20:12.980 に答える
9

//演算子は論理的に定義されています-または。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
于 2012-10-16T09:21:42.427 に答える
2

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`
于 2012-10-16T09:23:07.573 に答える
1

それは「定義済み-または」です。$abc // "default"と同等defined($abc) ? $abc : "default"です。つまり、の左側に//定義された値がある場合はその値が使用され、そうでない場合は右側が使用されます。

perlopのマニュアルページの「Logicaldefined-or」を参照してください。

于 2012-10-16T09:21:09.323 に答える
0

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かどうかが重要になります。

于 2012-10-16T09:20:50.180 に答える