【发布时间】:2017-01-19 11:08:26
【问题描述】:
我正在使用一些代码,该代码具有一个包含数组引用作为参数之一的子例程。这个传入数组中的元素可以是小数组或字符串。
我想确定每个元素的类型以便做一些特定的事情(即如果元素是数组,则通过索引进一步深入,如果元素是字符串,则使用字符串)
我尝试使用ref 函数来询问每个数组元素。它似乎适用于数组元素,但如果元素是字符串,我期待 ref 返回 SCALAR。然而ref() 似乎什么也没返回。我究竟做错了什么?我认为ref() 会返回一些东西。
这里是一些示例代码:
my @array = ("string1",
["ele1_arraystr1", "ele1_arraystr2"],
"string2",
["ele4_arraystr1", "ele4_arraystr2"],
"etc");
my $tmp;
&foobar( 30, 20, \@array);
sub foobar {
my($var1, $var2, $array_ref) = @_;
foreach $element (@$array_ref) {
my $tmp = ref($element);
print "Array element type: $tmp\n";
if ($tmp eq 'ARRAY') {
print " ARRAY: $element->[1]\n";
} elsif ($tmp eq 'SCALAR') {
print " SCALAR: $element\n";
} else {
print " Unexpected type: $tmp\n";
}
}
}
输出看起来像这样:
ARRAY element test:
Array element type:
Unexpected type:
Array element type: ARRAY
ARRAY: ele1_arraystr2
Array element type:
Unexpected type:
Array element type: ARRAY
ARRAY: ele4_arraystr2
Array element type:
Unexpected type:
【问题讨论】: