你能强制标量或数组引用成为Perl中的数组吗?

Rud*_*ski 28 arrays perl scalar reference

我有一个$results从服务返回的perl变量.该值应该是一个数组,$results应该是一个数组引用.但是,当数组中只有一个项目时,$results将设置为该值,而不是包含该项目的引用数组.

我想foreach在预期的数组上做一个循环.没有检查ref($results) eq 'ARRAY',是否有任何方法可以获得与以下内容相同的内容:

foreach my $result (@$results) {
    # Process $result
}
Run Code Online (Sandbox Code Playgroud)

该特定代码示例将用于参考,但会抱怨简单的标量.

编辑:我应该澄清,我无法更改从服务返回的内容.问题是当只有一个值时,该值将是一个标量,当有多个值时,它将是一个数组引用.

svr*_*ist 26

我不确定还有其他方法:

$result = [ $result ]   if ref($result) ne 'ARRAY';  
foreach .....
Run Code Online (Sandbox Code Playgroud)


小智 12

另一个解决方案是将调用包装到服务器并让它始终返回一个数组以简化您的余生:

sub call_to_service
{
    my $returnValue = service::call();

    if (ref($returnValue) eq "ARRAY")
    {
        return($returnValue);
    }
    else
    {
       return( [$returnValue] );
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您总是可以知道您将获得对数组的引用,即使它只是一个项目.

foreach my $item (@{call_to_service()})
{
  ...
}
Run Code Online (Sandbox Code Playgroud)