#!/usr/bin/perl -w use strict; use warnings; my %subs = ( farenheit => sub { warn "Matched F with $^N\n"; return sprintf("%.u" , ($^N - 32) / 1.8) . 'C' }, celsius => sub { warn "Matched C with $^N\n"; return sprintf("%.u" , ($^N * 1.8) + 32) . 'F' }, ); my $WHAT; my $regex = qr/ (\d+)F (?{ $WHAT = 'farenheit' }) | (\d+)C (?{ $WHAT = 'celsius' }) /xi; my $html = do { local $/; }; $html =~ s/$regex/$subs{$WHAT}->()/eg; warn $html; __DATA__ convert 180F to C convert 180C to F