my ($str) = $input =~ m#^-L(((?!\s*-).)*)#; $input =~ s#-lmylib#$str/mylib.a#; #### # # Input : -L/usr/local/lib -lmylib -lz # Desired output: -L/usr/local/lib /usr/local/lib/mylib.a -lz # use strict; use warnings; # The input string my $input = '-L/usr/local/lib -lmylib -lz'; # The meat my ($str) = $input =~ m#^-L(((?!\s*-).)*)#; $input =~ s#-lmylib#$str/mylib.a#;