File: oo.pm

package info (click to toggle)
libmoo-perl 2.005005-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 840 kB
  • sloc: perl: 2,506; makefile: 2
file content (72 lines) | stat: -rw-r--r-- 1,332 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package oo;
use strict;
use warnings;

use Moo::_Utils qw(_load_module);

sub moo {
  print <<'EOMOO';
 ______
< Moo! >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
EOMOO
  exit 0;
}

my $package;
sub import {
  moo() if $0 eq '-';
  $package = $_[1] || 'Class';
  if ($package =~ s/^\+//) {
    _load_module($package);
  }
  my $line = (caller)[2] || 1;
  require Filter::Util::Call;
  my $done;
  Filter::Util::Call::filter_add(sub {
    if (!$done) {
      s{\A}{package $package;\nuse Moo;\n#line $line\n};
      $done = 1;
    }
    return Filter::Util::Call::filter_read();
  });
}

1;
__END__

=head1 NAME

oo - syntactic sugar for Moo oneliners

=head1 SYNOPSIS

  perl -Moo=Foo -e 'has bar => ( is => q[ro], default => q[baz] ); print Foo->new->bar'

  # loads an existing class and re-"opens" the package definition
  perl -Moo=+My::Class -e 'print __PACKAGE__->new->bar'

=head1 DESCRIPTION

oo.pm is a simple source filter that adds C<package $name; use Moo;> to the
beginning of your script, intended for use on the command line via the -M
option.

=head1 SUPPORT

See L<Moo> for support and contact information.

=head1 AUTHORS

See L<Moo> for authors.

=head1 COPYRIGHT AND LICENSE

See L<Moo> for the copyright and license.

=cut