$line =~ s/^([^#]*)#.*$/$1/; #### $line =~ s/^ ( # grab this stuff in $1 ( [^#"]* # prefix of non-#s, non-"s (\" # start of string [^\"]* # content of string \")? # end of string [^#"]* # suffix )* # grab many prefix-string-suffixes ) \# # start of comment .* $ /$1/x;