Perl中的表示法 - || =运算符是做什么的?

Kan*_*ong 3 perl notation

我碰巧遇到了一个带有以下语法的perl代码.

sub new{
my ($class, $value)=@_;
$lobby ||= bless{
e=>undef;},$class
}
Run Code Online (Sandbox Code Playgroud)

语法||=是什么意思?

我没有把它作为一个关键词,我在perldoc中找不到类似的语法.

Mor*_*kus 9

你会在perlop中找到运算符的含义.

它现在做了什么:$lhs ||= $rhs相当于$lhs = $lhs || $rhs.这意味着在Perlish意义上将if $rhs赋值为false.这可以是如果是,如果它是一个空字符串,一个数字,是0.$lhs$lhs$lhsundef

  • 从更广泛的意义上讲,|| = here似乎是在第一次调用new时初始化单例. (4认同)

ike*_*ami 8

EXPR1 ||= EXPR2;
Run Code Online (Sandbox Code Playgroud)

是相同的

EXPR1 = EXPR1 || EXPR2;
Run Code Online (Sandbox Code Playgroud)

除了EXPR1只评估一次.这是设置默认值的便捷方式.例如:

sub foo {
   my %args = @_;
   $args{host} ||= "localhost";  # Provide a default host name if none provided.
   ...
}
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您似乎有一个单例构造函数.第一次new调用时,它会创建一个新对象.在后续调用中,它将返回先前创建的对象.