perl中//运算符的含义

Suv*_*ker 0 perl operators

我是perl的新手.任何人都可以//在perl中解释运算符的含义.

pax*_*blo 10

它是定义运算符.表达方式:

A // B
Run Code Online (Sandbox Code Playgroud)

A如果已定义则返回,否则返回B.

如果未定义信息源,则获取默认值非常有用,例如:

$actualBalance = $balanceFromBank // 0;
Run Code Online (Sandbox Code Playgroud)

要么:

$confirmation = $userInput // "N";
Run Code Online (Sandbox Code Playgroud)

请参阅perlop页面的相关部分以获取更多详细信息,并建立perlop链接以供将来参考,因为Google搜索和标点符号Perl代码不能很好地混合:-)


sim*_*que 8

所述//操作者是一个逻辑定义-或.Perlop说:

虽然它在C语言中没有直接的等价物,但Perl的//运算符与它的C风格有关.事实上,它与||完全相同,只是它测试左手边的定义而不是真实.因此,EXPR1 // EXPR2返回EXPR1的值(如果已定义),否则返回EXPR2的值.(EXPR1在标量上下文中评估,EXPR2在//本身的上下文中评估).通常,这与定义的结果相同(EXPR1)?EXPR1:EXPR2(除了三元运算符形式可以用作左值,而EXPR1 // EXPR2不能).这对于为变量提供默认值非常有用.如果您确实要测试是否定义了$ a和$ b中的至少一个,请使用defined($ a // $ b).

简而言之:如果定义了表达式(如未定义undef)或右侧,则返回左侧.

my $foo = undef;
say $foo // 42;
# 42

my $bar = 'bar';
say $bar // 42;
# bar
Run Code Online (Sandbox Code Playgroud)