Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Assistance please

by grondilu (Pilgrim)
on Nov 21, 2012 at 21:46 UTC ( #1005017=note: print w/ replies, xml ) Need Help??


in reply to Assistance please

Here is how I'd do it (I skip the part when you parse the weight table and prompt the user):

#!/usr/bin/perl use strict; use warnings; # whatever you need to fill %weights ... sub mol_form { my $formula = shift; my $mass; for ($formula =~ /[A-Za-z]\d*/g) { /(?<element>[A-Za-z])(?<amount>\d+)?/; $mass += ($+{amount} // 1) * $weights{$+{element}}; } return $mass; } say mol_form "H2O";

The most tricky part is to separate each group of element+optionalquantity, and then to process them. That's why I ended up with two regexes, not just one.


Comment on Re: Assistance please
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1005017]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (8)
As of 2014-09-16 21:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (48 votes), past polls