use v5.10;
use warnings;
my $grammar_unflattened = do {
use Regexp::Grammars;
qr{
mv \s* <from> \s* <to>
<rule: from> <file>
<rule: to> <file>
<rule: file> <dirpath>? <filename>
<token: dirpath> /? (?: [\w.-]+ / )+
<token: filename> [\w.-]+
}xms;
};
my $grammar_flattened = do {
use Regexp::Grammars;
qr{
mv \s* <from> \s* <to>
<rule: from> <MATCH=file>
<rule: to> <MATCH=file>
<rule: file> <dirpath>? <filename>
(?{ $MATCH = ($MATCH{dirpath}//q{})
. $MATCH{filename}
})
<token: dirpath> /? (?: [\w.-]+ / )+
<token: filename> [\w.-]+
}xms;
};
while (my $line = <>) {
my $line_copy = $line;
if ($line =~ $grammar_unflattened) {
use Data::Dumper 'Dumper';
say Dumper \%/;
}
if ($line_copy =~ $grammar_flattened) {
use Data::Dumper 'Dumper';
say Dumper \%/;
}
}