Skip to content

Commit 91ef98d

Browse files
authored
Merge pull request #784 from fglock/fix/module-loaded-less-pragma
Fix Module::Loaded by adding less pragma
2 parents 96c857a + 8cbff02 commit 91ef98d

2 files changed

Lines changed: 106 additions & 0 deletions

File tree

src/main/perl/lib/less.pm

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package less;
2+
3+
use strict;
4+
use warnings;
5+
6+
our $VERSION = '0.03';
7+
8+
sub _pack_tags {
9+
return join ' ', @_;
10+
}
11+
12+
sub _unpack_tags {
13+
return grep { defined and length }
14+
map { split ' ' }
15+
grep { defined } @_;
16+
}
17+
18+
sub stash_name {
19+
return $_[0];
20+
}
21+
22+
sub of {
23+
my $class = shift;
24+
25+
return unless defined wantarray;
26+
27+
my $hinthash = (caller 0)[10] || {};
28+
my %tags;
29+
@tags{ _unpack_tags($hinthash->{ $class->stash_name }) } = ();
30+
31+
if (@_) {
32+
exists $tags{$_} and return 1 for @_;
33+
return;
34+
}
35+
36+
return keys %tags;
37+
}
38+
39+
sub import {
40+
my $class = shift;
41+
my $stash = $class->stash_name;
42+
43+
@_ = 'please' if !@_;
44+
45+
my %tags;
46+
@tags{ _unpack_tags(@_, $^H{$stash}) } = ();
47+
$^H{$stash} = _pack_tags(keys %tags);
48+
49+
return;
50+
}
51+
52+
sub unimport {
53+
my $class = shift;
54+
my $stash = $class->stash_name;
55+
56+
if (@_) {
57+
my %tags;
58+
@tags{ _unpack_tags($^H{$stash}) } = ();
59+
delete @tags{ _unpack_tags(@_) };
60+
61+
my $new = _pack_tags(keys %tags);
62+
if (length $new) {
63+
$^H{$stash} = $new;
64+
}
65+
else {
66+
delete $^H{$stash};
67+
}
68+
}
69+
else {
70+
delete $^H{$stash};
71+
}
72+
73+
return;
74+
}
75+
76+
1;
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use strict;
2+
use warnings;
3+
use Test::More;
4+
5+
ok(!less->of, 'less has no active tags by default');
6+
7+
{
8+
use less;
9+
ok(less->of('please'), 'use less defaults to please');
10+
is_deeply([sort less->of], ['please'], 'less->of lists active default tag');
11+
}
12+
13+
ok(!less->of('please'), 'less hint is lexical');
14+
15+
{
16+
use less qw(memory CPU);
17+
ok(less->of('memory'), 'less sees memory tag');
18+
ok(less->of('CPU'), 'less sees CPU tag');
19+
ok(less->of('CPU', 'disk'), 'less checks any requested tag');
20+
21+
{
22+
no less 'CPU';
23+
ok(less->of('memory'), 'no less removes only named tag');
24+
ok(!less->of('CPU'), 'CPU tag removed');
25+
}
26+
27+
ok(less->of('CPU'), 'outer less tags are restored');
28+
}
29+
30+
done_testing;

0 commit comments

Comments
 (0)