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 )