use strict; use warnings; $_ = join '', ; s/\@MAC\((\w+),(\w+),(\w+),(\d+)\)/"$1 =\n".MAC($2,$3,$4)/eg; print; sub MAC { my ($x, $y, $n) = @_; $_ = ':'; $_ = "($_)+($_)" while ($n /= 2) != .5; $n = 0; s/:/"$x$n*$y".$n++/eg; return $_; } __DATA__ @MAC(Result,X,Y,1); @MAC(Result,X,Y,2); @MAC(Result,X,Y,4); @MAC(Result,X,Y,8);