my $code; { local $/; $code = ; } my @pieces = split m{/\*|\*/} $code; # split on comment delimiters; my $incomment = 0; my @csv = ( '' ); for ( @pieces ) { if ( m{/\*} ) { $incomment = 1; $csv[$#csv] .= $_; } elsif ( m{\*/} ) { $incomment = 0; $csv[$#csv] .= $_; } elsif ( $incomment ) { $csv[$#csv] .= $_; } else { my ( $first, @rest ) = split /,/, $_, -1; # don't truncate trailing commas $csv[$#csv] .= $first; push @csv, @rest if ( @rest ); } } #### { local $/; $code = <>; } $code =~ s{ */\*.*?\*/ *}{ }gs; # allow "." to match "\n" # now split on commas (and newlines?)