XP is just a number PerlMonks

Re^3: glob an array?

by choroba (Archbishop)
 on Feb 14, 2021 at 21:45 UTC Need Help??

in reply to Re^2: glob an array?

Watch for the replies to Perl Weekly Challenge 099/Task 1, it seems to be the same problem.

map{substr\$_->[0],\$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

Replies are listed 'Best First'.
Re^4: glob an array?
by LanX (Cardinal) on Feb 14, 2021 at 23:00 UTC
What did I miss?

```use v5.12;
use warnings;
use Data::Dump qw/pp dd/;
use Test::More;

our \$/="\n\n\n";
our @sets = <DATA>;

for (@sets) {
my (\$example) = /^(Example \d*):/m;
my (\$input)   = /^Input: (.*)\$/m;
my (\$output)  = /^Output: (.*)\$/m;
\$input =~ s(\\$P)(;\\$P);
my (\$S,\$P);
eval \$input;

#pp [\$S,\$P];

my \$re = glob2re(\$P);

my \$res = (\$S =~ \$re);
is( 0+\$res, \$output, "\$example \$input");
}

done_testing;

sub glob2re {
my ( \$pat ) = @_ ;

\$_ = "\Q\$pat";
s/\Q\*/\.\*/g;
s/\Q\?/\./g;

return qr/^\$_\$/;
}

__DATA__
Example 1:

Input: \$S = "abcde" \$P = "a*e"
Output: 1

Example 2:

Input: \$S = "abcde" \$P = "a*d"
Output: 0

Example 3:

Input: \$S = "abcde" \$P = "?b*d"
Output: 0

Example 4:

Input: \$S = "abcde" \$P = "a*c?e"
Output: 1

```C:/Perl_524/bin\perl.exe -w d:/tmp/pm/weekly_challenge.pl
ok 1 - Example 1 \$S = "abcde" ;\$P = "a*e"
ok 2 - Example 2 \$S = "abcde" ;\$P = "a*d"
ok 3 - Example 3 \$S = "abcde" ;\$P = "?b*d"
ok 4 - Example 4 \$S = "abcde" ;\$P = "a*c?e"
1..4

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery

> What did I miss?

It's possible to implement it without a regex.

map{substr\$_->[0],\$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
Fun, our regex solutions are practically identical. :)

But should be noted that real file globs are far more complicated to translate.

They could include classes and ranges [ab-c] , alternativs {a,b,c} and all of this could be escaped.

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery

choroba, I enjoyed your code! - well written++.

One issue that hasn't been discussed is case sensitivity. On my Win10 machine, file glob will be case insensitive. It is possible to create a Windows NTFS partition with filename case sensitivity. I've never done it, but such a thing is in theory possible. I don't what Perl file glob would do in that case or what it does on Unix?

Create A New User
Node Status?
node history
Node Type: note [id://11128380]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (1)
As of 2021-04-17 05:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?

No recent polls found

Notices?