我是perl的新手。任何人都可以在perl中解释//
运算符的含义。
答案 0 :(得分:10)
这是定义运算符。表达式:
A // B
如果已定义,将返回A
,否则为B
。
如果未定义信息来源,则获取默认值非常有用,例如:
$actualBalance = $balanceFromBank // 0;
或:
$confirmation = $userInput // "N";
请参阅the relevant part of the perlop page以获取更多详细信息,并建立perlop的链接以供将来参考,因为Google搜索和标点符号Perl代码不能很好地混合: - )
答案 1 :(得分:8)
//
运算符是逻辑定义的 - 或。 Perlop说:
虽然它在C中没有直接的等价物,但Perl的//运算符是 与其C风格或。事实上,它与||完全相同, 除了它测试左手边的定义而不是它 真相。因此,EXPR1 // EXPR2返回EXPR1的值(如果是) 定义,否则,返回EXPR2的值。 (EXPR1是 在标量上下文中评估,在//本身的上下文中EXPR2)。 通常,这与定义的结果相同(EXPR1)? EXPR1:EXPR2 (除了三元运算符形式可以用作左值,而 EXPR1 // EXPR2不能)。这对于提供默认值非常有用 变量的值。如果你真的想测试至少一个 $ a和$ b已定义,使用已定义($ a // $ b)。
简而言之:如果定义了表达式(如非undef
)或右侧,则返回左侧。
my $foo = undef;
say $foo // 42;
# 42
my $bar = 'bar';
say $bar // 42;
# bar
答案 2 :(得分:2)
它是所谓的defined-or
运算符,已在Perl 5.10中实现。 doc:
以下表达式:
$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`
答案 3 :(得分:1)
那是"定义 - 或"。 $abc // "default"
相当于defined($abc) ? $abc : "default"
。这意味着如果//
的左侧有一个定义的值,则使用该值,否则使用该值。
答案 4 :(得分:0)
是defined or
喜欢,
my $a //= 3;
会将3分配给$a
与||
不同,or
就是my $a = "";
$a //= 3;
print "|$a|\n";
$a = "";
$a ||=5;
print "|$a|\n";
:
|5|
将仅打印$a
,因为在第一种情况下$a
已定义(具有错误值),而在第二种情况下,true
评估为{{1}}时很重要或不。