Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 想要密钥和/或值吗?另外,如何使用hashref“做第二件事”?第二件事是打印一个标量值,但是如果你有一个散列,将会有不止一个值。如果它是一个hashref,我想在单个值上迭代一次,这是整个hashref。我不希望循环做任何特殊的事情,除非它是一个数组引用_Perl_Reference - Fatal编程技术网

Perl 想要密钥和/或值吗?另外,如何使用hashref“做第二件事”?第二件事是打印一个标量值,但是如果你有一个散列,将会有不止一个值。如果它是一个hashref,我想在单个值上迭代一次,这是整个hashref。我不希望循环做任何特殊的事情,除非它是一个数组引用

Perl 想要密钥和/或值吗?另外,如何使用hashref“做第二件事”?第二件事是打印一个标量值,但是如果你有一个散列,将会有不止一个值。如果它是一个hashref,我想在单个值上迭代一次,这是整个hashref。我不希望循环做任何特殊的事情,除非它是一个数组引用,perl,reference,Perl,Reference,想要密钥和/或值吗?另外,如何使用hashref“做第二件事”?第二件事是打印一个标量值,但是如果你有一个散列,将会有不止一个值。如果它是一个hashref,我想在单个值上迭代一次,这是整个hashref。我不希望循环做任何特殊的事情,除非它是一个数组引用。然后你必须检查数组引用。我将把我的答案留给那些没有“其他可能性”问题的人。另一种可能是修改产生结果的内容,使其始终返回数组引用。好吧,值得一试,但我想你回答了我的问题,尽管我不喜欢这个结论。我得走很长的路。不幸的是,我没有那种奢侈。很有可能这


想要密钥和/或值吗?另外,如何使用hashref“做第二件事”?第二件事是打印一个标量值,但是如果你有一个散列,将会有不止一个值。如果它是一个hashref,我想在单个值上迭代一次,这是整个hashref。我不希望循环做任何特殊的事情,除非它是一个数组引用。然后你必须检查数组引用。我将把我的答案留给那些没有“其他可能性”问题的人。另一种可能是修改产生结果的内容,使其始终返回数组引用。好吧,值得一试,但我想你回答了我的问题,尽管我不喜欢这个结论。我得走很长的路。不幸的是,我没有那种奢侈。很有可能这个值实际上是一个散列引用,不一定只是一个标量,在这种情况下,我希望它做第二件事,并迭代一次。如果它是一个hashref,你想要键,值,还是两者都要?另外,如何使用hashref“做第二件事”?第二件事是打印一个标量值,但是如果你有一个散列,将会有不止一个值。如果它是一个hashref,我想在单个值上迭代一次,这是整个hashref。我不希望循环做任何特殊的事情,除非它是一个数组引用。然后你必须检查数组引用。我将把我的答案留给那些没有“其他可能性”问题的人。另一种可能是修改产生结果的内容,使其始终返回数组引用。好吧,值得一试,但我想你回答了我的问题,尽管我不喜欢这个结论。我得做很长一段路。我得补充一句:加上所有的标点符号,这就是你想要的“Perlish”,不是吗?@SilvioMayolo只是想让你知道——我想这就是你想要的(虽然很接近,但并不漂亮)。对于生产解决方案,我会推荐一个您自己的小sub,它可以清楚地写出来,因为它不碍事。(然后你可以在那里做得更多。)这在设计上是有意义的,因为它确实处理了一些特殊的事情。我必须补充一点:有了所有的标点符号,这就是你想要的“Perlish”,不是吗?@SilvioMayolo只是想让你知道——我想这就是你想要的(尽管很接近,但并不漂亮)。对于生产解决方案,我会推荐一个您自己的小sub,它可以清楚地写出来,因为它不碍事。(然后你可以在那里做更多的事情。)这在设计上是有意义的,因为它确实处理一些特殊的事情。
my $result = my_complicated_expression;
for my $value (ref($result) eq 'ARRAY' ? @$result : ($result)) {
    # Do work with $value
}
use v5.12;

my $result1 = "Hello World";
my $result2 = [ "Hello" , "World" ];

for my $result ($result1, $result2) {
    for my $value ( ref $result ? @$result : $result) {
        say $value ;
    }
}
Hello World
Hello
World
my $result = *some function call* // [];
$result    = [$result] if ref $result ne 'ARRAY';

for my $val ( @$result ){
   print $val;
}
#!/usr/bin/perl
use 5.012;

use strict;
no warnings;

sub array_ref;

my $result = [qw/foo bar foobar/];
 # $result = 'foo';         # scalar test case 
 # $result = {foo=>q{bar}}; # hash   test case
$result = array_ref $result;

for my $val ( @$result ){
  say $val;
}

sub array_ref {
  my $ref = shift;
  given(ref $ref){
    $ref = [%$ref] when('HASH');
    $ref = [$ref]  when(['SCALAR','']);
    when('ARRAY'){}
    default {
      die 'Did not prepare for other ref types';
    }
  }
  return $ref;
}
sub deref {
    map ref($_) eq 'ARRAY'? @$_ : ref($_) eq 'HASH'? %$_ : $_, @_
}

sub myCompExpr {
    1, 2, 3, [4, 5, 6], {Hello => 'world', Answer => 42}
}

print $_ for deref myCompExpr
my $ra = [ qw(a b c) ];
my $x = 23;

my $var = $ra;
# my $var = $x;    # swap comment to test the other

foreach my $el ( eval { @{$var} }, $@ && $var ) 
{
    next if $el =~ /^$/;  # when @$var is good comma adds empty line
    print $el, "\n";
}
foreach my $el ( grep { !/^$/ } eval { @{$var} }, $@ && $var )