Vladimir Lemberg am Montag, 12. Februar 2007 21:33:
> Hi,

Hi Vladimir

(in addition to Davids post)

> I have a script, which suppose to find all *.xml files under the specified
> directory then process them. I'm facing the pattern match problem:
>
> use strict;
> use warnings;
> use Win32;
> use File::Find;
>
> @ARGV = Win32::GetCwd() unless @ARGV;
> my @dirs;
>
> find (\&FindXml, $ARGV[0]);
>
> sub FindXml
> {
>     return if !stat || -d;
>     ( my $xml_file = $File::Find::name ) =~ /^.+\.xml$/;
>     push ( @dirs, $xml_file );
> }
>
> In this examples the pattern match /^.+\.xml$/ is not working and

The pattern match _is_ working, but the effekt is not the desired one :-)

In this line, you first assign (unconditionally) $File::Find::name to 
$xml_file. Then a match is tried, giving a true or false result that is 
_not_used_. That's the reason why:

> all files 
> regardless of the extension have been assigned to $xml_file variable.
>
> #################
>
> However, if I change parenthesis to count the matching, the pattern seems
> to work.
>
> sub FindXml
> {
>     return if !stat || -d;
>     my $xml_file = ( $File::Find::name  =~ /^.+\.xml$/ );
>     print $xml_file;
> }

Here, $xml_file will have a boolean value, despite of the variable name.

Hope this explanation is useful (and correct),

Dani


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to