.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) .\" .\" 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 .\" ======================================================================== .\" .IX Title "Devel::REPL::Profile 3pm" .TH Devel::REPL::Profile 3pm "2022-06-03" "perl v5.34.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" Devel::REPL::Profile \- Code to execute when re.pl starts .SH "VERSION" .IX Header "VERSION" version 1.003029 .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& package Devel::REPL::Profile::MyProject; \& \& use Moose; \& use namespace::autoclean; \& \& with \*(AqDevel::REPL::Profile\*(Aq; \& \& sub apply_profile { \& my ($self, $repl) = @_; \& # do something here \& } \& \& 1; .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" For particular projects you might well end up running the same commands each time the \s-1REPL\s0 shell starts up \- loading Perl modules, setting configuration, and so on. .PP A mechanism called \fIprofiles\fR exists to let you package and distribute these start-up scripts, as Perl modules. .SH "USAGE" .IX Header "USAGE" Quite simply, follow the \*(L"\s-1SYNOPSIS\*(R"\s0 section above to create a boilerplate profile module. Within the \f(CW\*(C`apply_profile\*(C'\fR method, the \f(CW$repl\fR variable can be used to run any commands as the user would, within the context of their running \f(CW\*(C`Devel::REPL\*(C'\fR shell instance. .PP For example, to load a module, you might have something like this: .PP .Vb 4 \& sub apply_profile { \& my ($self, $repl) = @_; \& $repl\->eval(\*(Aquse Carp\*(Aq); \& } .Ve .PP As you can see, the \f(CW\*(C`eval\*(C'\fR method is used to run any code. The user won't see any output from that, and the code can \*(L"safely\*(R" die without destroying the \&\s-1REPL\s0 shell. The return value of \f(CW\*(C`eval\*(C'\fR will be the return value of the code you gave, or else if it died then a \f(CW\*(C`Devel::REPL::Error\*(C'\fR object is returned. .PP If you want to load a \f(CW\*(C`Devel::REPL\*(C'\fR plugin, then use the following method: .PP .Vb 1 \& $repl\->load_plugin(\*(AqTiming\*(Aq); .Ve .PP The \f(CW\*(C`load_plugin\*(C'\fR and \f(CW\*(C`eval\*(C'\fR methods should cover most of what you would want to do before the user has access to the shell. Remember that plugin features are immediately available, so you can load for example the \f(CW\*(C`LexEnv\*(C'\fR plugin, and then declare \f(CW\*(C`my\*(C'\fR variables which the user will have access to. .SS "Selecting a Profile" .IX Subsection "Selecting a Profile" To run the shell with a particular profile, use the following command: .PP .Vb 1 \& system$ re.pl \-\-profile MyProject .Ve .PP Alternatively, you can set the environment variable \f(CW\*(C`DEVEL_REPL_PROFILE\*(C'\fR to MyProject. .PP When the profile name is unqualified, as in the above example, the profile is assumed to be in the \f(CW\*(C`Devel::REPL::Profile::\*(C'\fR namespace. Otherwise if you pass something which contains the \f(CW\*(C`::\*(C'\fR character sequence, it will be loaded as-is. .SH "SUPPORT" .IX Header "SUPPORT" Bugs may be submitted through the \s-1RT\s0 bug tracker (or bug\-Devel\-REPL@rt.cpan.org ). .PP There is also an irc channel available for users of this distribution, at \&\f(CW\*(C`#devel\*(C'\fR on \f(CW\*(C`irc.perl.org\*(C'\fR . .SH "AUTHOR" .IX Header "AUTHOR" Matt S Trout \- mst (at) shadowcatsystems.co.uk () .SH "COPYRIGHT AND LICENCE" .IX Header "COPYRIGHT AND LICENCE" This software is copyright (c) 2007 by Matt S Trout \- mst (at) shadowcatsystems.co.uk (). .PP This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.