Luke Bakken wrote:

>>>>        I have a string, "$a" for arguments sake, that contains a
>>
>>single
>>
>>>>word.  The word will always have exactly 8 characters in it, most
>>
>>likely
>>
>>>>something like "ABCD1234".  I need to split this up into two strings
>>
>>($b
>>
>><snip>
>>
>>>if (length $string == 8) # might as well check eh?
>>>{
>>>   $string =~ /^([^\d]+)(.*)$/;
>>>   my ($characterString, $numberString) = ($1, $2);
>>>}
>>
>>
>>There is one potential problem with this algorithm, which is that you
>>aren't checking to make sure that the string actually matches your
>>regex.  This can result in $1 and $2 containing the values from the last
>>string that worked instead of being blank or failing, which can be hard
>>to track down when you start getting different values than what you
>>expected.
> 
> 
> Maybe you're used to some old behavior in Perl, but that doesn't
> appear to be the case in 5.8.8 at least. I get this output:
> 
> C:\TEMP>testre
> $1 AAAA $2 1111
> $1  $2

Maybe try something more like:

foreach ('AAAA1111', '!!!!!!!') {

        if (/^(\D{4})(\d{4})$/) {       # if exactly 4 ea alpha/num
                print "alpha='$1' num='$2'\n";
        } else {
                print "Bad expr: $_\n";
        }
}

> from this test script:
> 
> use strict;
> 
> my $str = 'AAAA1111';
> matchit();
> $str = '!!!!!!!!';
> matchit();
> 
> sub matchit
> {
>       if (length $str == 8) {
>               $str =~ /^(\D+)(\d+)$/;
>               print "\$1 $1 \$2 $2\n";
>       }
> }
_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to