繁体   English   中英

尝试更改foreach循环时出现语法错误

[英]Syntax errors while trying to change a foreach loop

我对Perl还是很陌生,我想学习足够的知识来重构几行遗留代码。

这是我的代码片段:

my ( $data2 ) = @_;
foreach $app (@{$data2->{record}})
{
...
    if ( $app->{submission_date__required_} )
    {
            $datetime = convert_date( $app->{submission_date__required_}, "both" );
            print $datetime;
    }
}

我试图做的是这样的:

my $data = pop $data2;
my $app = $data->{record};

if ( $app->{submission_date__required_} )
{
    $datetime = convert_date( $app->{submission_date__required_}, "both" );
    print $datetime;
}

关于我在做什么错以及如何实现我所需要的任何解释(从循环中检索最后一项并将其分配给$ app而不是遍历整个循环)将不胜感激。

我在日志中有奇怪的错误,该页面无法加载。 错误日志显示如下:

[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value in lc at submitapp.pl line 48.
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $notix in print at submitapp.pl line 177.
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $store in string eq at submitapp.pl line 249.
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $store in string eq at submitapp.pl line 258.
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $store in string eq at submitapp.pl line 267.
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $operating_mode in string eq at submitapp.pl line 287.
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $operating_mode in string eq at submitapp.pl line 300.
[Tue May 10 14:55:20 2016] [error] [client xxx.xxx.xxx.xxx] Use of uninitialized value $operating_mode in string eq at submitapp.pl line 328.
[Tue May 10 15:09:10 2016] [error] [client xxx.xxx.xxx.xxx] syntax error at getqbdata.pl line 415, near "), referer: http://xxx.xxx.xxx.xxx/qb/submitapp.pl?action=Submit
[Tue May 10 15:09:10 2016] [error] [client xxx.xxx.xxx.xxx] \t\tprint", referer: http://xxx.xxx.xxx.xxx/qb/submitapp.pl?action=Submit
[Tue May 10 15:09:10 2016] [error] [client xxx.xxx.xxx.xxx] Execution of getqbdata.pl aborted due to compilation errors., referer: http://xxx.xxx.xxx.xxx/qb/submitapp.pl?action=Submit
[Tue May 10 15:09:10 2016] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: getqbdata.pl

没关系,在Apache重新启动#9之后,它终于可以工作了。

$data2是对哈希的引用。 pop()函数将数组作为参数。 因为$data2引用哈希,所以没有要删除的“最后一个”元素的概念。 因此,您将需要重新考虑您要做什么。

在您的情况下,循环遍历$data2->{record}引用的数组。 您可以访问的最后一个元素pop然而,:

my $app = pop @{$data2->{record}};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM