最初,我的代码如下所示:
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/