尝试使用这段代码从XML文件中提取信息,我没有按预期获得所需的输出,我知道它在foreach循环中的内容, - >我的问题如何在这种情况下可以使用foreach循环
use strict; use XML::Simple; use Data::Dumper; my %top_in_ou_bi; $top_in_ou_bi{"input"}{name}=add; $top_in_ou_bi{"input"}{name}=clk; $top_in_ou_bi{"input"}{name}=dat_in; $top_in_ou_bi{"output"}{name}=dat_out; $top_in_ou_bi{"bidirection"}{name}=ctrl; foreach my $nam(sort keys %top_in_ou_bi){ foreach my $dat(keys %{$top_in_ou_bi{$nam}}){ print"$nam $dat: $top_in_ou_bi{$nam}{$dat}\n"; } }
输出:
bidirection name: ctrl input name: dat_in output name: dat_out
预期产量:
bidirection name: ctrl input name: dat_in input name: clk input name: add output name: dat_out
也使用"use strict"警告不允许使用裸词,如何超越此警告!
谢谢!
编辑
我想知道下面的代码段是否有效?
my $top_in=$root_top->{input}; my $top_ou=$root_top->{output}; my $top_bi=$root_top->{bidirection}; foreach my $name(keys %$top_in) { print "input $name\n"; } foreach my $name(keys %$top_ou) { print "output $top_ou->{name}\n"; } foreach my $name(keys %$top_bi) { print "bidirection $top_bi->{name}\n"; }
Ted Hopp.. 7
它与foreach
循环无关.问题是如何填充%top_in_ou_bi
哈希值.哈希只能包含每个键的单个值.在密钥下存储多个值时"input"
,只保留最后一个值.
你可以做的最好的事情是在每个键上存储一个数组(通过引用)而不是标量值.或者您可以使用类似的模块Hash::MultiValue
.
要禁止裸字警告,请不要使用裸字.引用事物('add'
而不是add
等)或声明变量(取决于你想要完成的事情).
它与foreach
循环无关.问题是如何填充%top_in_ou_bi
哈希值.哈希只能包含每个键的单个值.在密钥下存储多个值时"input"
,只保留最后一个值.
你可以做的最好的事情是在每个键上存储一个数组(通过引用)而不是标量值.或者您可以使用类似的模块Hash::MultiValue
.
要禁止裸字警告,请不要使用裸字.引用事物('add'
而不是add
等)或声明变量(取决于你想要完成的事情).