add perl version strategy pattern