我解释错了,应该是跟嵌套函数有关,我需要看看那篇文档 [?]
2009/8/23 zhang jiaqiang <[email protected]> > 非常感谢回复。(正在看给出的那个链接) > > 另外,也简要说一下我这边程序的本意,看有是否能有更好的程序组织方式,从而避过这个嵌套函数的问题: > > > 先用Find::File遍历目录找出所有符合条件的XML文件,然后对每个XML文件进行解析,用XML::Parser,我把startElement放在了这个Parser_XML函数内部,结果在对这个函数里变量$tag_count处理时发现了这个问题: > > > 我觉得startElement和$$tag_count都和XML处理有关,直觉应该放在Parser_XML内部;如果把$tag_count放在程序的最外围声明,可以解决这个问题,但是感觉从逻辑上有点说不过去。 > > use strict; > # main begin > ..... > > find( \&Wanted,$dir); > > sub Wanted > { > if ( $_ =~ /some reg/ ){ > Parser_XML($_); > } > } > > sub Parser_XML { > my $xmlfile = shift; > my $tag_count; > $parser->setHandlers( Start => \&startElement ); > $parser->parsefile($xmlfile); > print "There is $count in this xml file\n"; > > sub startElement { > ...... > $tag_count++ if $element == 'TAG'; > } > > } > > > > Best regards > Zhang JiaQiang > > > > 2009/8/23 Qiang (James) <[email protected]> > >> zhang jiaqiang wrote: >> >> > 大家好, >> > >> > 新手想不太明白一个变量作用的问题,请帮忙看看。 >> > >> > 我的问题是如何理解$x后两次没有值,为什么在函数in_a里还有值?而且第三次循 >> > 环的时候这个值怎么成2了? >> >> 简单的解释是嵌套函数的原因。复杂的这里讲的很清楚,就不和你重复了。。 >> >> >> http://perl.apache.org/docs/general/perl_reference/perl_reference.html#my____Scoped_Variable_in_Nested_Subroutines >> >> 另外,没有特别需要,没有人会这么写 Perl 程序。 >> >> Qiang >> >> >> > >> > 简化的程序如下: >> > >> > for $i (0..2){ >> > a(); >> > } >> > sub a >> > { >> > my $x ; >> > in_a(); >> > print $i,":\t",$x,"\n"; >> > undef $x; >> > sub in_a >> > { >> > $x++; >> > print "in_a:$x\n"; >> > } >> > } >> > >> > 执行结果: >> > in_a:1 >> > 0: 1 >> > in_a:1 >> > 1: >> > in_a:2 >> > 2: >> > >> > >> > >> > Best regards >> > Zhang JiaQiang >> > >> > >> > > >> >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ 您收到此信息是由于您订阅了 Google 论坛“PerlChina Mongers 讨论组”论坛。 要在此论坛发帖,请发电子邮件到 [email protected] 要退订此论坛,请发邮件至 [email protected] 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛 -~----------~----~----~----~------~----~------~--~---
<<inline: 330.gif>>
