arrays - 有条件地实例化一个新的Perl数组

标签 arrays perl ternary

最初,我的代码如下所示:

my @departments = @{$opts->{'d'}} if $opts->{'d'};

我想根据Perl Best Practices重构内联if语句,所以现在我得到了以下代码:
my @departments;
if( $opts->{'d'} )
{
    @departments = @{$opts->{'d'} };
}
$opts只是一个哈希引用,可能将数组ref作为键的值。

我想做类似下面的事情来使代码保持一行:
my @departments = $opts->{'d'} ? @{$opts->{'d'}} : undef;

但是显然,这只会将一个元素放入@departments中,值为undef

我以这种方式执行此操作的原因是因为我以后希望能够检查
if( @departments )
{
    my $department_string = join( q{,}, @departments );
    $big_string . $department_string;
}

动态添加到字符串。

最佳答案

这样做:

my @departments = $opts->{'d'} ? @{$opts->{'d'}} : undef;

是相同的
my @departments = $opts->{'d'} ? @{$opts->{'d'}} : (undef);

如果$opts->{d}为false,它将为数组undef分配一个元素@departments。您不希望包含单个元素的数组。您需要一个空数组。

因此,您要做的就是为@departments分配一个空列表,如下所示:
my @departments = $opts->{'d'} ? @{$opts->{'d'}} : ();

另一件事:您的标题是“有条件地实例化一个新的Perl数组”,而实际上我们正在做的是有条件地填充它。当您说my @departments时,它被实例化。

关于arrays - 有条件地实例化一个新的Perl数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31755220/

相关文章:

c - 嵌套二维结构数组的大小

javascript - 使用 perl 创建 html

后缀或自定义后缀运算符的 Perl 自定义语法

php - 正则表达式:必须以字母或数字开头,其余可以是任何内容

Java 三元运算符错误

c - 指针持有地址以外的东西? [C]

c++ - 带指针的可调整大小数组

c++ - 64 位平台上的效率 : pointer vs 32-bit array indexing

javascript - 如何将这个条件逻辑转换为三元表达式?

Java 三元搜索