On Tue, 24 Dec 2013 18:30:32 -0800, Russ Allbery wrote:
> > However: > > foreach (grep { $_ } split /\s+/, $data->{"files-excluded"}) { > > Is someone here better with regexes than me? ;-) > > We need to replace /\s+/ with one that does not split if the space is > > escaped > > with a backslash. > > my @excluded > = ($data->{"files-excluded"} =~ /(?:\A|\G[ ]+)((?:\\.|[^\\ ])+)/g); > @excluded = map { s/\\(.)/$1/g; $_ } @excluded; > foreach (@excluded) { > > will work, I believe. I don't think there's an easy way to do that with > split. You'd have to do some complex thing with look-behind assertions. Wow, that's fancy! And you have reason to believe that it works, at least for my testcase :) #v+ #!/usr/bin/perl use strict; use warnings; use 5.010; use Dpkg::Control::Hash; my $data = Dpkg::Control::Hash->new(); $data->load('debian/copyright'); # d/copyright contains: #Files-Excluded: a b # c\ d # e\ f\ g my @excluded = ($data->{"files-excluded"} =~ /(?:\A|\G[ ]+)((?:\\.|[^\\ ])+)/g); @excluded = map { s/\\(.)/$1/g; $_ } @excluded; say foreach (@excluded); foreach (grep { $_ } split /(?<!\\)\s+/, $data->{"files-excluded"}) { s?\\??g; say $_; } #v- Both loops output a b c d e f g Cheers, gregor -- .''`. Homepage: http://info.comodo.priv.at/ - OpenPGP key 0xBB3A68018649AA06 : :' : Debian GNU/Linux user, admin, and developer - http://www.debian.org/ `. `' Member of VIBE!AT & SPI, fellow of the Free Software Foundation Europe `-
signature.asc
Description: Digital signature