our
$VERSION
=
'0.000002'
;
$VERSION
=
eval
$VERSION
;
sub
import
{
my
(
$me
,
$class
,
@args
) =
@_
;
return
unless
$class
;
my
$targ
=
caller
;
require
join
(
'/'
,
split
'::'
,
$class
).
'.pm'
;
my
(
$name
) =
@args
&&
$args
[0] =~ /^\$/ ?
map
/^\$(.*)/,
shift
@args
:
'O'
;
my
$obj
=
$class
->can(
'new'
) ?
$class
->new(
@args
) :
$class
;
no
strict
'refs'
;
${
"${targ}::${name}"
} =
$obj
;
}
1;
=head1 NAME
new - Object instantiation sugar
for
one-liners
=head1 SYNOPSIS
Simplest possible usage:
perl -Mnew=HTTP::Tiny -E \
With arguments:
perl -Mnew=HTTP::Tiny,max_redirects,3 -E \
With custom object name:
perl -Mnew=HTTP::Tiny,\
$H
-E \
With both:
perl -Mnew=HTTP::Tiny,\
$H
,max_redirects,3 -E \
=head1 DESCRIPTION
=head2
import
new->
import
(
$class
,
@args
)
First we C<
require
> the file
for
C<
$class
>, then call
$class
->new(
@args
)
then install the resulting object in C<
$O
> in the calling
package
.
B<Caveat>:
if
C<
$class
> loads successfully but does not have a C<new> method,
we install the C<
$class
> instead since you might want to call class methods.
If the first argument to C<
import
>
after
C<
$class
> begins
with
C<$>, this
is treated as the name to install the object as, so
new->
import
(
$class
,
'$Obj'
,
@args
);
will create a variable C<
$Obj
> in the calling
package
instead of C<
$O
>.
=head1 AUTHOR
mst - Matt S. Trout (cpan:MSTROUT) <mst
@shadowcat
.co.uk>
=head1 CONTRIBUTORS
None yet - maybe this software is perfect! (ahahahahahahahahaha)
=head1 COPYRIGHT
Copyright (c) 2020 the new L</AUTHOR> and L</CONTRIBUTORS>
as listed above.
=head1 LICENSE
This library is free software and may be distributed under the same terms
as perl itself.