On Jul 27, 2012, at 7:04 AM, Gary Stainburn wrote:
> Hi folks.
>
> I'm struggling to see what I'm doing wrong. I have the following code in one
> of my programs but it isn't working as it should.
>
>
> print STDERR "enqmake='$enqmake' model='$model'\n";
> if (!$enqmake && $model) { # extract make
> print STDERR "About to split '$model'\n";
> if ($model=~/ *?(\w*) (.*?) *$/) {
> $enqmake=lc($1);
> $model=$2;
> print STDERR "model split into '$enqmake' '$model'\n";
> }
> } # extract make
>
> This generates:
>
> enqmake='' model='Kia Venga'
> About to split 'Kia Venga'
>
> I have a test script which works fine. Can anyone see what I'm doing wrong?
No. Your script works fine for me if I precede it with the following two lines:
my $model = 'Kia Venga';
my $engmake;
>
> #!/usr/bin/perl -w
>
> use warnings;
> use strict;
>
> my $t='Kia Venga';
>
> if ($t=~/ *?(\w*) (.*?) *$/) {
> print "1='$1' 2='$2'\n";
> }
>
> [root@ollie exim]# ~/t
> 1='Kia' 2='Venga'
Your test script also works fine. Therefore, it must be something else in your
larger program.
I suggest you use the escape sequence \s for whitespace instead of just using
the space character. You should also use the x modifier so that spaces in your
pattern will be ignored. That will allow you to determine by inspection what
your pattern is really doing. I also use m{ } to delineate the pattern and \z
to anchor the end of match instead of $:
if( $model =~ m{ \s*? (\w*) \s (.*?) \s* \z }x ) {
...
Why aren't you using the split function?
($model,$engmake) = split(' ',$model);
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/