sub mk_tagger { my($tag) = @_; return sub { my($txt) = @_; "<$tag>$txt" }; } my ($bold, $underline, $italic) = map { mk_tagger($_) } qw( b u i ); print $bold->("what a " . $underline->("nice") . $italic->(" day")); #### sub mk_tagger ($tag) { -> { "<$tag>$^txt" } } #### tagStr :: String -> String -> String tagStr tag text = "<" ++ tag ++ ">" ++ text ++ "" -- now I can use it either way. tagStr "b" "a bold moose" underline = tagStr "u" underline "an underlined moose"