So I think I had already implemented what Bob suggested.  Specifically I'm doing:
Unicode::Collate->new( variable => 'shifted', entry => "0020 ; [.0209.0020.0002] # SPACE
" )
Which is to say to use the use the UCS 10 collation, using punctuation and whitespace as the last level tiebreaker, but to treat a normal space as a standard character and consider it at level 1 instead. In theory I should add some of the other whitespace characters, like maybe full-width space, but I really doubt that's going to be an issue.
From the standards document:[table]Description
Examples
			 L1 
				Base characters 
				role < roles < rule 
			L2 
				Accents 
				role < rôle < roles 
			L3 
				Case/Variants 
				role < Role < rôle 
			L4 
				Punctuation 
				role < “role” < Role 
			Ln 
				Identical 
				role < ro?le < “role” 
-- ∇×V
	
	
	
Unicode::Collate->new( variable => 'shifted', entry => "0020 ; [.0209.0020.0002] # SPACE
" )
Which is to say to use the use the UCS 10 collation, using punctuation and whitespace as the last level tiebreaker, but to treat a normal space as a standard character and consider it at level 1 instead. In theory I should add some of the other whitespace characters, like maybe full-width space, but I really doubt that's going to be an issue.
From the standards document:[table]
Examples
-- ∇×V

 
 

 
