in reply to split - please help

Your explanation is difficult to understand. It would have been easier for you and clearer to someone trying to answer your questions if you had just written:

I have this string:

my $str = 'XXXX - AAAA - - XXXXXXX XX - XXXXX XX TNBBBBB ';

...and I want to end up with this hash:

my $data = ( 'keyA' => 'AAAAA', 'keyB' => 'BBBBB' );

...or whatever it is you want.

If you have this string:

my $str = "XXXX - 12345 - - XXXXXXX XX - XXXXX XX TN67890";

and you want to get 12345 and 67890 into a hash, you can do this:

use strict; use warnings; use 5.010; my $str = 'XXXX - 12345 - - XXXXXXX XX - XXXXX XX TN6789'; my @pieces = split /\s+/, $str; my $val1 = $pieces[2]; (my $val2 = $pieces[-1]) =~ s/^TN//; say $val1; say $val2; my %hash = ( 'keyA' => $val1, 'keyB' => $val2 ); say %hash; --output:-- 12345 6789 keyB6789keyA12345

Replies are listed 'Best First'.
Re^2: split - please help
by 7stud (Deacon) on Nov 10, 2009 at 01:50 UTC

    If you don't know which letters are on the front of "TN6789", or even how many letters are on the front of that string, you can change the substitution to this:

    s/^\D*//

    ...where ^ matches the start of the string, and \D matches "not a digit", and the * applies to "not a digit" and means "0 or more times". Because the * is greedy, it will match as many non-digits as it can find at the start of the string.