.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "MooseX::SingleArg 3pm" .TH MooseX::SingleArg 3pm "2022-12-11" "perl v5.36.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" MooseX::SingleArg \- No\-fuss instantiation of Moose objects using a single argument. .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 2 \& package Person; \& use Moose; \& \& use MooseX::SingleArg; \& \& single_arg \*(Aqname\*(Aq; \& \& has name => ( is=>\*(Aqro\*(Aq, isa=>\*(AqStr\*(Aq ); \& \& my $john = Person\->new( \*(AqJohn Doe\*(Aq ); \& print $john\->name(); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This module allows Moose instances to be constructed with a single argument. Your class or role must use this module and then use the single_arg sugar to declare which attribute will be assigned the single argument value. .PP If the class is constructed using the typical argument list name/value pairs, or with a hashref, then things work as is usual. But, if the arguments are a single non-hashref value then that argument will be assigned to whatever attribute you have declared. .PP The reason for this module's existence is that when people want this feature they usually find Moose::Cookbook::Basics::Person_BUILDARGSAndBUILD which asks that something like the following be written: .PP .Vb 3 \& around BUILDARGS => sub { \& my $orig = shift; \& my $class = shift; \& \& if ( @_ == 1 && ! ref $_[0] ) { \& return $class\->$orig(ssn => $_[0]); \& } \& else { \& return $class\->$orig(@_); \& } \& }; .Ve .PP The above is complex boilerplate for a simple feature. This module aims to make it simple and fool-proof to support single-argument Moose object construction. .SH "INIT_ARG BEHAVIOR" .IX Header "INIT_ARG BEHAVIOR" If setting a custom init_arg for an attribute which you will be assigning as the single_arg then use the init_arg value, rather than the attribute key, for it. For example: .PP .Vb 2 \& single_arg \*(Aqmoniker\*(Aq; \& has name => ( is=>\*(Aqro\*(Aq, isa=>\*(AqStr\*(Aq, init_arg=>\*(Aqmoniker\*(Aq ); .Ve .SH "FORCING SINGLE ARG PROCESSING" .IX Header "FORCING SINGLE ARG PROCESSING" An optional force parameter may be specified: .PP .Vb 3 \& single_arg name => ( \& force => 1, \& ); .Ve .PP This causes constructor argument processing to only work in single-argument mode. If more than one argument is passed then an error will be thrown. The benefit of forcing single argument processing is that hashrefs may now be used as the value of the single argument when force is on. .SH "SEE ALSO" .IX Header "SEE ALSO" MooseX::OneArgNew solves the same problem that this module solves. I considered using OneArgNew for my own needs, but found it oddly cumbersome and confusing. Maybe that's just me, but I hope that this module's design is much simpler to comprehend and more natural to use. .SH "AUTHOR" .IX Header "AUTHOR" Aran Clary Deltac .SH "CONTRIBUTORS" .IX Header "CONTRIBUTORS" .IP "\(bu" 4 Xavier Guimard .IP "\(bu" 4 Mohammad S Anwar .SH "LICENSE" .IX Header "LICENSE" This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.