我是Perl的初学者,我需要获得数组的大小
SOAP咨询代码如下
my @params = (
SOAP::Data->name(user => '2355'),
SOAP::Data->name(psw => '2355')
);
my $soap = SOAP::Lite
->uri( 'https://service.example.com' )
->on_action( sub { join '/', 'https://service.example.com', $_[1] } )
->proxy( 'https://service.example.com/service.php?wsdl' );
my $method = SOAP::Data->name('GetAll')
->attr( {xmlns => 'https://service.example.com'} );
my @products = $soap->call($method => @params)->result;
返回
$VAR1 = bless({
date_end => [0, 0, "2016-06-30"],
dispach => [0, 51, 0],
manufacturer => ["Microsoft", "Lenovo", "HP"],
sku => [
"R23649C ",
"DW47-03 ",
"YDG-016 ",
],
tree => [
"MS-OPEN ",
"LENOVO-AIO ",
"HP ACADEMIC ",
],
}, "parametros_salida");
我可以使用
访问数据print $products->{"sku"}[0];
print $products->{"manufacturer"}[0];
print $products->{"manufacturer"}[1];
但是我不能算作调用SOAP的结果只返回单个变量Dumper($ products)因此我无法获得数组大小。
我已经尝试了
my @products2 = $products
print 0 + @products2;
print scalar(@products2);
print scalar $products;
答案 0 :(得分:3)
编辑 正如其他人所指出的,对于这个具体的例子 - 当您的哈希引用实际上是一个有福的引用(也就是说,一个对象) ),你应该使用类的API来获取它的成员,而不是深入到对象的内部。
以下是一个通用答案,解释了如何访问等效的 unblessed Perl数据结构,并且与您的情况无直接关系
$products
和@products
是两个完全不相关的变量。他们有
彼此无关。
假设$products
是您传递给Data::Dumper
以获取该输出的变量,那么$products
是对哈希的引用。它不是一个数组,所以当你要求“数组大小”时,我不确定你的意思。
您可以使用以下命令查看$products
引用的哈希中有多少个键:
my $key_count = keys %{$products}
或者如果您想要$products
引用的哈希中的一个数组的大小,例如manufacturer
,您可以这样做:
my $size = @{ $products->{manufacturer} }
您可以从文档Perl references and nested data structures和Perl Data Structures Cookbook中了解有关Perl中Perl引用和数据结构的更多信息,这是每个标准Perl发行版的一部分
如果您对自己的情况有适当的建议,请阅读Object-Oriented Programming in Perl Tutorial