G'day piscean,
Welcome to the monastery.
You can do that like this. The tests include one- and two-letter symbols with and without numbers. I'll leave you to replace my rough atomic weights with more precise ones.
#!/usr/bin/env perl -l use strict; use warnings; my %weight = (C => 12, O => 16, Cl => 35.5); my %tests = ( phenol => ['C6H5OH', 6 * 12 + 1 * 16], chloroform => ['CHCl3', 1 * 12 + 3 * 35.5], ); for my $compound (keys %tests) { print '-' x 40; print "Compound: $compound"; my $formula = $tests{$compound}[0]; print "Formula: $formula"; my $calculated = 0; $formula =~ s{([A-Z][a-z]?)(\d*)}{ exists $weight{$1} and $calculated += $weight{$1} * ($2 || 1) }eg; print "Expected: $tests{$compound}[1]"; print "Calculated: $calculated"; }
Output:
---------------------------------------- Compound: phenol Formula: C6H5OH Expected: 88 Calculated: 88 ---------------------------------------- Compound: chloroform Formula: CHCl3 Expected: 118.5 Calculated: 118.5
-- Ken
In reply to Re: How to avoid an alphabet and integer next to it in a string?
by kcott
in thread How to avoid an alphabet and integer next to it in a string?
by piscean
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |