in reply to Regular Expression

It might be easier to use perl's built in routines substr and index:
my $string = 'text1 text2 -f -DFLAG1 -global -DFLAG2 -DFLAG1'; my $pattern = '-D'; print substr($string, index($string, $pattern)), "\n";

index() returns the position, in the $string, of the first occurent of $pattern. Then substr uses the position to return everything after it inside $string. This should be simpler and much faster than using a .* regex.