Perl:无法将“on-the-fly”数组传递给sub
发布时间:2020-12-15 21:46:08 所属栏目:大数据 来源:网络整理
导读:strftime(),根据cpan.org: print strftime($template,@lt); 我只是想不出这个正确的Perl代码配方.它一直报告我调用strftime()的错误: ...use Date::Format;...sub parse_date { if ($_[0]) { $_[0] =~ /(d{4})/; my $y = $1; $_[0] =~ s/d{4}//; $_[0] =
strftime(),根据cpan.org:
print strftime($template,@lt); 我只是想不出这个正确的Perl代码配方.它一直报告我调用strftime()的错误: ... use Date::Format; ... sub parse_date { if ($_[0]) { $_[0] =~ /(d{4})/; my $y = $1; $_[0] =~ s/d{4}//; $_[0] =~ /(dd)D(dd)/; return [$2,$1,$y]; } return [7,7,2010]; } foreach my $groupnode ($groupnodes->get_nodelist) { my $groupname = $xp->find('name/text()',$groupnode); my $entrynodes = $xp->find('entry',$groupnode); for my $entrynode ($entrynodes->get_nodelist) { ... my $date_added = parse_date($xp->find('date_added/text()',$entrynode)); ... $groups{$groupname}{$entryname} = {...,'date_added'=>$date_added,...}; ... } } ... my $imday = $maxmonth <= 12 ? 0 : 1; ... while (my ($groupname,$entries) = each %groups) { ... while (my ($entryname,$details) = each %$entries) { ... my $d = @{$details->{'date_added'}}; $writer->dataElement("creation",strftime($date_template,(0,12,@$d[0^$imday],@$d[1^$imday]-1,@$d[2],0))); } ... } ... 如果我使用()通过strftime()传递所需的数组,我得到: 如果我使用[]传递所需的数组,我得到: 如何将数组动态传递给Perl中的sub?这可以通过PHP,Python,JS等轻松完成.但我无法用Perl来理解它. 编辑:我将代码减少到这几行,我仍然遇到了完全相同的问题: #!/usr/bin/perl use warnings; use strict; use Date::Format; my @d = [7,13,2010]; my $imday = 1; print strftime( q"%Y-%m-%dT12:00:00",$d[0^$imday],$d[1^$imday]-1,$d[2],0)); 解决方法
如果需要数组并且您有一个临时列表,则需要实际创建一个数组.它不需要是一个单独的变量,你可以这样做:
strftime( $date_template,@{ [0,$d[1^$imday],0] } ); 我不知道为什么Date :: Format会让你受到这种可怕的影响,而不仅仅是期望多个标量参数;似乎毫无意义(与其他模块如何实现strftime相反). Graham Barr通常设计出比这更好的接口.也许它可以追溯到原型仍然是一般用途的酷想法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |