http://qs1969.pair.com?node_id=35096


in reply to regexp's

Untested but should be enough to give you the idea:
foreach (@array) { /^(\d+).*(\w+)$/; %hash{$2} = $1; }
- For each element in @array

- Start of line
- Capture digits to $1
- Don't capture stuff between $1 and $2
- Capture alphanumerics to $2
- End of line

- Use values captured in $1 and $2 to populate hash
Update: Long live Dot Star. The problem is simple, I believe the solution should be too.

Update II: Ovid Just a nitpick, don't hate me for this but he wanted the last field as key and first field as value not the other way around. jcwren that is a beautiful solution.

Replies are listed 'Best First'.
(Ovid) RE(2): regexp's
by Ovid (Cardinal) on Oct 03, 2000 at 18:27 UTC
    AAAAAAARRRRRRRGGGGGGGGGHHHHHHHHH! I had them backwards!!!! I hate it when I do that!!!

    Yes, I'm anal about the .* thing. I'm also anal about use strict, -w, checking that my open actually opened something, etc. I do see your point and I acknowledge that your regex is much simpler to read. However, iteration combined with dot star is begging for issues. In this case, though, since the backtracking appears to be small (just 4 characters, max) -- assuming that this is not just an over-simplified subset of data -- it's probably not that much of an issue.

    Cheers,
    Ovid

    Join the Perlmonks Setiathome Group or just go the the link and check out our stats.