s_d*_*lan 2 arrays perl ternary
最初,我的代码看起来像这样:
my @departments = @{$opts->{'d'}} if $opts->{'d'};
Run Code Online (Sandbox Code Playgroud)
我想if根据Perl Best Practices重构内联语句,所以现在我有了以下代码:
my @departments;
if( $opts->{'d'} )
{
@departments = @{$opts->{'d'} };
}
Run Code Online (Sandbox Code Playgroud)
$opts 只是一个哈希引用,可能有一个数组引用作为键的值.
我想做类似以下的事情来保持代码在一行:
my @departments = $opts->{'d'} ? @{$opts->{'d'}} : undef;
Run Code Online (Sandbox Code Playgroud)
但显然,这只会使一个元素@departments具有价值undef.
我以这种方式执行此操作的原因是因为我后来想要检查
if( @departments )
{
my $department_string = join( q{,}, @departments );
$big_string . $department_string;
}
Run Code Online (Sandbox Code Playgroud)
动态添加到字符串.
这样做:
my @departments = $opts->{'d'} ? @{$opts->{'d'}} : undef;
Run Code Online (Sandbox Code Playgroud)
是相同的
my @departments = $opts->{'d'} ? @{$opts->{'d'}} : (undef);
Run Code Online (Sandbox Code Playgroud)
if $opts->{d}为false将为undef数组分配单个元素@departments.您不希望包含单个元素的数组.你想要一个空数组.
所以,你想要做的是分配一个空列表@departments,如下所示:
my @departments = $opts->{'d'} ? @{$opts->{'d'}} : ();
Run Code Online (Sandbox Code Playgroud)
另一件事:你的标题说"有条件地实例化一个新的Perl数组",而我们正在做的是有条件地填充它.当你说时,它会被实例化my @departments.