根据定义分配两个可能值中的变量之一的最佳方法?

时间:2014-01-30 16:47:32

标签: perl

    my $port_string;
    if (defined($self->{port_range})) {
        $port_string = $self->{port_range};
    } else {
        $port_string = "whatever2";
    }

如果定义了一个值,我想分配一个变量值,如果第一个值是undef,我想分配另一个值。

在Perl中有一种单行方式吗?或者至少比我在那里更简单?

3 个答案:

答案 0 :(得分:8)

在Perl 5.10及更高版本中,您可以使用defined-or运算符:

my $port_string = $self->{port_range} // "whatever2";

答案 1 :(得分:8)

您可以使用条件运算符使此语句更简洁:

my $port_string = defined $self->{port_range} ? $self->{port_range} :
                                                "whatever2";

您也可以使用defined-或:

my $port_string = $self->{port_range} // "whatever2";

或逻辑 - 或:

my $port_string = $self->{port_range} || "whatever2";

已定义 - 或者可能是简洁。

注意:正如@ikegami在下面提到的那样,如果$self->{port_range}0"",则逻辑或案例将进行替换,因为这些值为 falsy

答案 2 :(得分:1)

我认为

my $port_string = defined $self->port_range
  ? $self->port_range
  : "whatever2";

应该是好的。