use warnings; use strict; use Data::Dump qw(pp); print "perl version $] \n\n"; for my $line ( "\"quoted text\" \cM\cJ", "\"quoted_text\" \cM\cJ", "\"quoted-text\" \cM\cJ" ) { print 'line: ', pp($line), "\n"; my @ra; @ra = $line =~ m/^(\s*)((?'quote'"?)[^\s"]*\g{quote})\s+(\[[^\]]*\]|)\s*$/; print 'rx 1: ', pp(\@ra), "\n"; @ra = $line =~ m/^(\s*)((?'quote'"?)[^\s"]*")\s+(\[[^\]]*\]|)\s*$/; print 'rx 2: ', pp(\@ra), "\n"; @ra = $line =~ m/^(\s*)(("?)[^\s"]*")\s+(\[[^\]]*\]|)\s*$/; print 'rx 3: ', pp(\@ra), "\n"; @ra = $line =~ m/^(\s*)("?[^\s"]*")\s+(\[[^\]]*\]|)\s*$/; print 'rx 4: ', pp(\@ra), "\n"; }