[英]Perl Array and Hash references Handling
我的问题是我在脚本结束时没有输出..解析时的所有打印都没问题,但结尾处的数组是空的。
我做错了什么? 这不是处理裁判的方法吗?
thx 4回应
my %branches = ();
print "<pre>";
my %tmp_branch;
while (defined($_ = shift @bugs)) {
my $bug_id = $_->id;
my $bug_product = $_->product;
my $content = $browser->get("http://****?ticket=".$bug_id);
$content = $content->decoded_content;
my @rows = split /\n/, $content;
my $trigger = 0;
while (defined($_ = shift @rows)) {
chomp;
if ($_ eq "") {
$trigger = 0;
}
elsif (/Branch: (.*)/) {
if (exists $branches{$1}) {
my $branch_ref = $branches{$1};
%tmp_branch = %$branch_ref;
print "existing Branch: $1\n";
} else {
my %new_branch = ();
my @sources = ();
my @wfs = ();
my @methods = ();
$new_branch{'sources'} = \@sources;
$new_branch{'methods'} = \@methods;
$new_branch{'wfs'} = \@wfs;
$branches{$1} = \%new_branch;
%tmp_branch = %new_branch;
print "new Branch: $1\n";
}
}
elsif (/Sourcen.*:/) {
$trigger = "sources";
}
elsif (/geaenderte Methoden.*:/) {
$trigger = "methods";
}
elsif (/geaenderte Workflows.*:/) {
$trigger = "wfs";
}
elsif ($trigger && $_ ne "") {
my $tmp_array_ref = $tmp_branch{$trigger};
my @tmp_array = @$tmp_array_ref;
push @tmp_array, $_;
print "find $trigger: $_\n";
}
}
}
print "\n\n\n";
while (my ($k,$v)=each %branches){
my $branch_ref = $v;
my %tmp_branch = %$branch_ref;
my $sources_ref = $tmp_branch{'sources'};
my @sources = @$sources_ref;
my $methods_ref = $tmp_branch{'methods'};
my @methods = @$methods_ref;
my $wfs_ref = $tmp_branch{'wfs'};
my @wfs = @$wfs_ref;
print "Branch: $k\nSources:\n";
print @sources;
print "\nMethods:\n";
print @methods;
print "\nWorkflows:\n";
print @wfs;
print "\n";
}
print "</pre>";
样本输入:
Kontext Auswertung fuer Ticket: #12345 (xxxxSomeTextxxx)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HINWEIS: xxxxSomeTextxxx
Branch: HEAD
~~~~~~~
Sourcen (4):
IamArow
IamArow2
IamArow3
IamArow4
geaenderte Methoden (1):
IamArow
geaenderte Workflows (2):
IamArow
IamArow2
没有任何输入数据很难弄明白,因为这意味着我们无法在自己的机器上运行脚本的副本! 如果您的示例代码是自包含的,通常非常有用!
也就是说,我认为你的问题源于做这样的事情:
my $branch_ref = $branches{$1};
%tmp_branch = %$branch_ref;
第二行执行散列的浅表副本 ,因此%tmp_branch
不再是与$branches{$1}
引用的散列相同的散列。 将数据添加到%tmp_branch
哈希时,不会将数据添加到$branches{$1}
哈希。
@tmp_array
同样受苦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.