Perl 根据定义的两个可能值中的一个指定变量的最佳方法?

Perl 根据定义的两个可能值中的一个指定变量的最佳方法?,perl,Perl,如果一个变量已定义,我想为它指定一个值;如果第一个变量未定义,我想为它指定另一个值 在Perl中是否有一种单行方式来实现这一点?或者至少比上面的要简单?在Perl 5.10及更高版本中,您可以使用以下运算符: my $port_string; if (defined($self->{port_range})) { $port_string = $self->{port_range}; } else { $port_string

如果一个变量已定义,我想为它指定一个值;如果第一个变量未定义,我想为它指定另一个值


在Perl中是否有一种单行方式来实现这一点?或者至少比上面的要简单?

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

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

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

my $port_string = $self->{port_range} // "whatever2";
您还可以使用定义的或:

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

my $port_string = $self->{port_range} // "whatever2";
定义或可能是最简洁的

注意:正如@ikegami在下面提到的,如果
$self->{port\u range}
0
,则逻辑or案例将进行替换,因为这些值是错误的

我想

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

应该很好。

@ikegami一个很好的注释,在这种情况下可能还可以。在Perl中它不是三元运算符吗?它是三元运算符。它不是三元运算符。它是条件运算符。
my $port_string = defined $self->port_range
  ? $self->port_range
  : "whatever2";