summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--perl.c20
-rw-r--r--pod/perlrun.pod8
2 files changed, 24 insertions, 4 deletions
diff --git a/perl.c b/perl.c
index ed8befaa66..aa80993c6d 100644
--- a/perl.c
+++ b/perl.c
@@ -2060,9 +2060,25 @@ Perl_moreswitches(pTHX_ char *s)
case 'd':
forbid_setid("-d");
s++;
- if (*s == ':' || *s == '=') {
- my_setenv("PERL5DB", Perl_form(aTHX_ "use Devel::%s;", ++s));
+ /* The following permits -d:Mod to accepts arguments following an =
+ in the fashion that -MSome::Mod does. */
+ if (*s == ':' || *s == '=') {
+ char *start;
+ SV *sv;
+ sv = newSVpv("use Devel::", 0);
+ start = ++s;
+ /* We now allow -d:Module=Foo,Bar */
+ while(isALNUM(*s) || *s==':') ++s;
+ if (*s != '=')
+ sv_catpv(sv, start);
+ else {
+ sv_catpvn(sv, start, s-start);
+ sv_catpv(sv, " split(/,/,q{");
+ sv_catpv(sv, ++s);
+ sv_catpv(sv, "})");
+ }
s += strlen(s);
+ my_setenv("PERL5DB", SvPV(sv, PL_na));
}
if (!PL_perldb) {
PL_perldb = PERLDB_ALL;
diff --git a/pod/perlrun.pod b/pod/perlrun.pod
index e105b00a7a..98ab39c855 100644
--- a/pod/perlrun.pod
+++ b/pod/perlrun.pod
@@ -284,11 +284,15 @@ be skipped.
runs the program under the Perl debugger. See L<perldebug>.
-=item B<-d:>I<foo>
+=item B<-d:>I<foo[=bar,baz]>
runs the program under the control of a debugging, profiling, or
tracing module installed as Devel::foo. E.g., B<-d:DProf> executes
-the program using the Devel::DProf profiler. See L<perldebug>.
+the program using the Devel::DProf profiler. As with the B<-M>
+flag, options may be passed to the Devel::foo package where they
+will be received and interpreted by the Devel::foo::import routine.
+The comma-separated list of options must follow a C<=> character.
+See L<perldebug>.
=item B<-D>I<letters>