Describe __PACKAGE__ in perldelta
[p5sagit/p5-mst-13.2.git] / utils / perlbug.PL
CommitLineData
37fa004c 1#!/usr/local/bin/perl
2
3use Config;
4use File::Basename qw(&basename &dirname);
5
6# List explicitly here the variables you want Configure to
7# generate. Metaconfig only looks for shell variables, so you
8# have to mention them as if they were shell variables, not
9# %Config entries. Thus you write
10# $startperl
11# to ensure Configure will look for $Config{startperl}.
12
13# This forces PL files to create target in same directory as PL file.
14# This is so that make depend always knows where to find PL derivatives.
44a8e56a 15chdir dirname($0);
16$file = basename($0, '.PL');
774d564b 17$file .= '.com' if $^O eq 'VMS';
37fa004c 18
19open OUT,">$file" or die "Can't create $file: $!";
20
21print "Extracting $file (with variable substitutions)\n";
22
23# In this section, perl variables will be expanded during extraction.
24# You can use $Config{...} to use Configure variables.
25
26print OUT <<"!GROK!THIS!";
5f05dabc 27$Config{startperl}
28 eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
29 if \$running_under_some_shell;
37fa004c 30!GROK!THIS!
31
32# In the following, perl variables are not expanded during extraction.
33
34print OUT <<'!NO!SUBS!';
35
36use Config;
37fa004c 37use Getopt::Std;
38
c07a80fd 39BEGIN {
40 eval "use Mail::Send;";
41 $::HaveSend = ($@ eq "");
42 eval "use Mail::Util;";
43 $::HaveUtil = ($@ eq "");
44};
45
46
37fa004c 47use strict;
48
49sub paraprint;
50
c07a80fd 51
137443ea 52my($Version) = "1.17";
c07a80fd 53
54# Changed in 1.06 to skip Mail::Send and Mail::Util if not available.
a5f75d66 55# Changed in 1.07 to see more sendmail execs, and added pipe output.
56# Changed in 1.08 to use correct address for sendmail.
c07a80fd 57# Changed in 1.09 to close the REP file before calling it up in the editor.
58# Also removed some old comments duplicated elsewhere.
59# Changed in 1.10 to run under VMS without Mail::Send; also fixed
a5f75d66 60# temp filename generation.
c07a80fd 61# Changed in 1.11 to clean up some text and removed Mail::Send deactivator.
a5f75d66 62# Changed in 1.12 to check for editor errors, make save/send distinction
63# clearer and add $ENV{REPLYTO}.
84478119 64# Changed in 1.13 to hopefully make it more difficult to accidentally
65# send mail
ab3ef367 66# Changed in 1.14 to make the prompts a little more clear on providing
67# helpful information. Also let file read fail gracefully.
8ecf1a0c 68# Changed in 1.15 to add warnings to stop people using perlbug for non-bugs.
69# Also report selected environment variables.
774d564b 70# Changed in 1.16 to include @INC, and allow user to re-edit if no changes.
137443ea 71# Changed in 1.17 Win32 support added. GSAR 97-04-12
c07a80fd 72
73# TODO: Allow the user to re-name the file on mail failure, and
74# make sure failure (transmission-wise) of Mail::Send is
75# accounted for.
37fa004c 76
ab3ef367 77my( $file, $usefile, $cc, $address, $perlbug, $testaddress, $filename,
37fa004c 78 $subject, $from, $verbose, $ed,
137443ea 79 $fh, $me, $Is_MSWin32, $Is_VMS, $msg, $body, $andcc, %REP);
37fa004c 80
81Init();
82
83if($::opt_h) { Help(); exit; }
84
84478119 85if(!-t STDIN) {
86 paraprint <<EOF;
87Please use perlbug interactively. If you want to
88include a file, you can use the -f switch.
89EOF
90 die "\n";
91}
92
c07a80fd 93if($::opt_d or !-t STDOUT) { Dump(*STDOUT); exit; }
94
37fa004c 95Query();
ab3ef367 96Edit() unless $usefile;
37fa004c 97NowWhat();
98Send();
99
100exit;
101
102sub Init {
103
104 # -------- Setup --------
105
137443ea 106 $Is_MSWin32 = $^O eq 'MSWin32';
84478119 107 $Is_VMS = $^O eq 'VMS';
37fa004c 108
c07a80fd 109 getopts("dhva:s:b:f:r:e:SCc:t");
37fa004c 110
111
112 # This comment is needed to notify metaconfig that we are
113 # using the $perladmin, $cf_by, and $cf_time definitions.
114
115
116 # -------- Configuration ---------
117
118 # perlbug address
119 $perlbug = 'perlbug@perl.com';
120
121 # Test address
122 $testaddress = 'perlbug-test@perl.com';
123
124 # Target address
125 $address = $::opt_a || ($::opt_t ? $testaddress : $perlbug);
126
127 # Possible administrator addresses, in order of confidence
128 # (Note that cf_email is not mentioned to metaconfig, since
129 # we don't really want it. We'll just take it if we have to.)
130 $cc = ($::opt_C ? "" : (
131 $::opt_c || $::Config{perladmin} || $::Config{cf_email} || $::Config{cf_by}
132 ));
133
134 # Users address, used in message and in Reply-To header
135 $from = $::opt_r || "";
136
137 # Include verbose configuration information
138 $verbose = $::opt_v || 0;
139
140 # Subject of bug-report message
141 $subject = $::opt_s || "";
142
ab3ef367 143 # Send a file
144 $usefile = ($::opt_f || 0);
145
37fa004c 146 # File to send as report
147 $file = $::opt_f || "";
148
149 # Body of report
150 $body = $::opt_b || "";
151
152 # Editor
ab3ef367 153 $ed = ( $::opt_e || $ENV{VISUAL} || $ENV{EDITOR} || $ENV{EDIT} ||
137443ea 154 ($Is_VMS ? "edit/tpu" : $Is_MSWin32 ? "notepad" : "vi")
ab3ef367 155 );
156
37fa004c 157
158 # My username
137443ea 159 $me = ($Is_MSWin32 ? $ENV{'USERNAME'} : getpwuid($<));
37fa004c 160
161}
162
163
164sub Query {
165
166 # Explain what perlbug is
167
168 paraprint <<EOF;
8ecf1a0c 169This program provides an easy way to create a message reporting a bug
170in perl, and e-mail it to $address. It is *NOT* intended for
54310121 171sending test messages or simply verifying that perl works, *NOR* is it
172intended for reporting bugs in third-party perl modules. It is *ONLY*
173a means of reporting verifiable problems with the core perl distribution,
174and any solutions to such problems, to the people who maintain perl.
175
176If you're just looking for help with perl, try posting to the Usenet
177newsgroup comp.lang.perl.misc. If you're looking for help with using
178perl with CGI, try posting to comp.infosystems.www.programming.cgi.
37fa004c 179
180EOF
181
182
183 # Prompt for subject of message, if needed
184 if(! $subject) {
185 paraprint <<EOF;
186First of all, please provide a subject for the
ab3ef367 187message. It should be a concise description of
774d564b 188the bug or problem. "perl bug" or "perl problem"
189is not a concise description.
37fa004c 190
191EOF
192 print "Subject: ";
193
194 $subject = <>;
195 chop $subject;
196
197 my($err)=0;
198 while( $subject =~ /^\s*$/ ) {
199 print "\nPlease enter a subject: ";
200 $subject = <>;
201 chop $subject;
202 if($err++>5) {
203 die "Aborting.\n";
204 }
205 }
206 }
207
208
209 # Prompt for return address, if needed
210 if( !$from) {
211
212 # Try and guess return address
c07a80fd 213 my($domain);
214
215 if($::HaveUtil) {
216 $domain = Mail::Util::maildomain();
137443ea 217 } elsif ($Is_MSWin32) {
218 $domain = $ENV{'USERDOMAIN'};
c07a80fd 219 } elsif ($Is_VMS) {
220 require Sys::Hostname;
221 $domain = Sys::Hostname::hostname();
222 } else {
223 $domain = `hostname`.".".`domainname`;
224 $domain =~ s/[\r\n]+//g;
225 }
37fa004c 226
227 my($guess);
228
229 if( !$domain) {
230 $guess = "";
bf9e8eaa 231 } elsif ($Is_VMS && !$::Config{'d_socket'}) {
c07a80fd 232 $guess = "$domain\:\:$me";
37fa004c 233 } else {
c07a80fd 234 $guess = "$me\@$domain" if $domain;
235 $guess = "$me\@unknown.addresss" unless $domain;
37fa004c 236 }
a5f75d66 237
238 $guess = $ENV{'REPLYTO'} if defined($ENV{'REPLYTO'});
239 $guess = $ENV{"REPLY-TO"} if defined($ENV{'REPLY-TO'});
37fa004c 240
241 if( $guess ) {
242 paraprint <<EOF;
243
244
a5f75d66 245Your e-mail address will be useful if you need to be contacted. If the
246default shown is not your full internet e-mail address, please correct it.
37fa004c 247
248EOF
249 } else {
250 paraprint <<EOF;
251
252So that you may be contacted if necessary, please enter
a5f75d66 253your full internet e-mail address here.
37fa004c 254
255EOF
256 }
257 print "Your address [$guess]: ";
258
259 $from = <>;
260 chop $from;
261
262 if($from eq "") { $from = $guess }
263
264 }
265
266 #if( $from =~ /^(.*)\@(.*)$/ ) {
267 # $mailname = $1;
268 # $maildomain = $2;
269 #}
270
271 if( $from eq $cc or $me eq $cc ) {
272 # Try not to copy ourselves
c07a80fd 273 $cc = "yourself";
37fa004c 274 }
275
276
277 # Prompt for administrator address, unless an override was given
278 if( !$::opt_C and !$::opt_c ) {
279 paraprint <<EOF;
280
281
282A copy of this report can be sent to your local
283perl administrator. If the address is wrong, please
c07a80fd 284correct it, or enter 'none' or 'yourself' to not send
285a copy.
37fa004c 286
287EOF
288
289 print "Local perl administrator [$cc]: ";
290
291 my($entry) = scalar(<>);
292 chop $entry;
293
294 if($entry ne "") {
295 $cc = $entry;
296 if($me eq $cc) { $cc = "" }
297 }
298
299 }
300
84478119 301 if($cc =~ /^(none|yourself|me|myself|ourselves)$/i) { $cc = "" }
37fa004c 302
303 $andcc = " and $cc" if $cc;
304
ab3ef367 305editor:
306
37fa004c 307 # Prompt for editor, if no override is given
308 if(! $::opt_e and ! $::opt_f and ! $::opt_b) {
309 paraprint <<EOF;
310
311
c07a80fd 312Now you need to supply the bug report. Try to make
37fa004c 313the report concise but descriptive. Include any
ab3ef367 314relevant detail. If you are reporting something
315that does not work as you think it should, please
316try to include example of both the actual
317result, and what you expected.
318
319Some information about your local
37fa004c 320perl configuration will automatically be included
ab3ef367 321at the end of the report. If you are using any
322unusual version of perl, please try and confirm
323exactly which versions are relevant.
37fa004c 324
325You will probably want to use an editor to enter
326the report. If "$ed" is the editor you want
327to use, then just press Enter, otherwise type in
328the name of the editor you would like to use.
329
c07a80fd 330If you would like to use a prepared file, type
37fa004c 331"file", and you will be asked for the filename.
332
333EOF
334
335 print "Editor [$ed]: ";
336
337 my($entry) =scalar(<>);
338 chop $entry;
ab3ef367 339
340 $usefile = 0;
341 if($entry eq "file") {
342 $usefile = 1;
343 } elsif($entry ne "") {
37fa004c 344 $ed = $entry;
345 }
346 }
347
348
349 # Generate scratch file to edit report in
350
c07a80fd 351 {
137443ea 352 my($dir) = ($Is_VMS ? 'sys$scratch:' :
353 ($Is_MSWin32 and $ENV{'TEMP'} ? $ENV{'TEMP'} : '/tmp/'));
c07a80fd 354 $filename = "bugrep0$$";
355 $filename++ while -e "$dir$filename";
356 $filename = "$dir$filename";
357 }
37fa004c 358
359
360 # Prompt for file to read report from, if needed
361
ab3ef367 362 if( $usefile and ! $file) {
363filename:
37fa004c 364 paraprint <<EOF;
365
37fa004c 366What is the name of the file that contains your report?
367
368EOF
369
370 print "Filename: ";
371
372 my($entry) = scalar(<>);
373 chop($entry);
374
ab3ef367 375 if($entry eq "") {
376 paraprint <<EOF;
377
378No filename? I'll let you go back and choose an editor again.
379
380EOF
381 goto editor;
382 }
383
37fa004c 384 if(!-f $entry or !-r $entry) {
ab3ef367 385 paraprint <<EOF;
386
387I'm sorry, but I can't read from `$entry'. Maybe you mistyped the name of
388the file? If you don't want to send a file, just enter a blank line and you
389can get back to the editor selection.
390
391EOF
392 goto filename;
37fa004c 393 }
394 $file = $entry;
395
396 }
397
398
399 # Generate report
400
401 open(REP,">$filename");
402
403 print REP <<EOF;
404This is a bug report for perl from $from,
405generated with the help of perlbug $Version running under perl $].
406
407EOF
408
409 if($body) {
410 print REP $body;
ab3ef367 411 } elsif($usefile) {
412 open(F,"<$file") or die "Unable to read report file from `$file': $!\n";
37fa004c 413 while(<F>) {
414 print REP $_
415 }
416 close(F);
417 } else {
774d564b 418 print REP <<EOF;
419
420-----------------------------------------------------------------
421[Please enter your report here]
422
423
424
425[Please do not change anything below this line]
426-----------------------------------------------------------------
427EOF
37fa004c 428 }
c07a80fd 429
430 Dump(*REP);
431 close(REP);
37fa004c 432
774d564b 433 # read in the report template once so that
434 # we can track whether the user does any editing.
435 # yes, *all* whitespace is ignored.
436 open(REP, "<$filename");
437 while (<REP>) {
438 s/\s+//g;
439 $REP{$_}++;
440 }
441 close(REP);
442
c07a80fd 443}
444
445sub Dump {
446 local(*OUT) = @_;
447
448 print OUT <<EOF;
37fa004c 449
774d564b 450---
37fa004c 451Site configuration information for perl $]:
452
453EOF
454
455 if( $::Config{cf_by} and $::Config{cf_time}) {
c07a80fd 456 print OUT "Configured by $::Config{cf_by} at $::Config{cf_time}.\n\n";
37fa004c 457 }
458
c07a80fd 459 print OUT Config::myconfig;
37fa004c 460
461 if($verbose) {
c07a80fd 462 print OUT "\nComplete configuration data for perl $]:\n\n";
37fa004c 463 my($value);
464 foreach (sort keys %::Config) {
465 $value = $::Config{$_};
466 $value =~ s/'/\\'/g;
c07a80fd 467 print OUT "$_='$value'\n";
37fa004c 468 }
469 }
8ecf1a0c 470 print OUT <<EOF;
471
774d564b 472---
473\@INC for perl $]:
474EOF
475 for my $i (@INC) {
476 print OUT "\t$i\n";
477 }
478
479 print OUT <<EOF;
8ecf1a0c 480
774d564b 481---
8ecf1a0c 482Environment for perl $]:
483EOF
54310121 484 for my $env (qw(PATH LD_LIBRARY_PATH),
485 sort grep { /^(?:PERL|LC_)/ } keys %ENV,
486 qw(LANG PERL_BADLANG
487 SHELL HOME LOGDIR)) {
8ecf1a0c 488 print OUT " $env",
489 exists $ENV{$env} ? "=$ENV{$env}" : ' (unset)',
490 "\n";
491 }
37fa004c 492}
493
494sub Edit {
495 # Edit the report
ab3ef367 496
497 if($usefile) {
498 $usefile = 0;
499 paraprint <<EOF;
500
501Please make sure that the name of the editor you want to use is correct.
502
503EOF
504 print "Editor [$ed]: ";
505
506 my($entry) =scalar(<>);
507 chop $entry;
37fa004c 508
ab3ef367 509 if($entry ne "") {
510 $ed = $entry;
511 }
512 }
513
514tryagain:
515 if(!$usefile and !$body) {
68dc0745 516 my $sts = system("$ed $filename");
517 if($sts) {
a5f75d66 518 #print "\nUnable to run editor!\n";
519 paraprint <<EOF;
520
521The editor you chose (`$ed') could apparently not be run!
522Did you mistype the name of your editor? If so, please
523correct it here, otherwise just press Enter.
524
525EOF
526 print "Editor [$ed]: ";
527
528 my($entry) =scalar(<>);
529 chop $entry;
530
531 if($entry ne "") {
532 $ed = $entry;
533 goto tryagain;
534 } else {
535
536 paraprint <<EOF;
537
538You may want to save your report to a file, so you can edit and mail it
539yourself.
540EOF
541 }
37fa004c 542 }
543 }
774d564b 544
545 # Check that we have a report that has some, eh, report in it.
546
547 my $unseen = 0;
548
549 open(REP, "<$filename");
550 # a strange way to check whether any significant editing
551 # have been done: check whether any new non-empty lines
552 # have been added. Yes, the below code ignores *any* space
553 # in *any* line.
554 while (<REP>) {
555 s/\s+//g;
556 $unseen++ if ($_ ne '' and not exists $REP{$_});
557 }
558
559 while ($unseen == 0) {
560 paraprint <<EOF;
561
562I am sorry but it looks like you did not report anything.
563
564EOF
565 print "Action (Retry Edit/Cancel) ";
566 my ($action) = scalar(<>);
567 if ($action =~ /^[re]/i) { # <R>etry <E>dit
568 goto tryagain;
569 } elsif ($action =~ /^[cq]/i) { # <C>ancel, <Q>uit
570 Cancel();
571 }
572 }
573
574}
575
576sub Cancel {
577 1 while unlink($filename); # remove all versions under VMS
578 print "\nCancelling.\n";
579 exit(0);
37fa004c 580}
581
582sub NowWhat {
583
584 # Report is done, prompt for further action
585 if( !$::opt_S ) {
586 while(1) {
587
588 paraprint <<EOF;
589
590
591Now that you have completed your report, would you like to send
592the message to $address$andcc, display the message on
593the screen, re-edit it, or cancel without sending anything?
594You may also save the message as a file to mail at another time.
595
596EOF
597
a5f75d66 598 print "Action (Send/Display/Edit/Cancel/Save to File): ";
37fa004c 599 my($action) = scalar(<>);
600 chop $action;
601
a5f75d66 602 if( $action =~ /^(f|sa)/i ) { # <F>ile/<Sa>ve
37fa004c 603 print "\n\nName of file to save message in [perlbug.rep]: ";
604 my($file) = scalar(<>);
605 chop $file;
606 if($file eq "") { $file = "perlbug.rep" }
607
608 open(FILE,">$file");
609 open(REP,"<$filename");
610 print FILE "To: $address\nSubject: $subject\n";
611 print FILE "Cc: $cc\n" if $cc;
612 print FILE "Reply-To: $from\n" if $from;
613 print FILE "\n";
614 while(<REP>) { print FILE }
615 close(REP);
616 close(FILE);
617
618 print "\nMessage saved in `$file'.\n";
619 exit;
620
a5f75d66 621 } elsif( $action =~ /^(d|l|sh)/i ) { # <D>isplay, <L>ist, <Sh>ow
37fa004c 622 # Display the message
623 open(REP,"<$filename");
624 while(<REP>) { print $_ }
625 close(REP);
84478119 626 } elsif( $action =~ /^se/i ) { # <S>end
a5f75d66 627 # Send the message
84478119 628 print "\
629Are you certain you want to send this message?
630Please type \"yes\" if you are: ";
631 my($reply) = scalar(<STDIN>);
632 chop($reply);
633 if( $reply eq "yes" ) {
634 last;
ab3ef367 635 } else {
636 paraprint <<EOF;
637
638That wasn't a clear "yes", so I won't send your message. If you are sure
639your message should be sent, type in "yes" (without the quotes) at the
640confirmation prompt.
641
642EOF
643
84478119 644 }
a5f75d66 645 } elsif( $action =~ /^[er]/i ) { # <E>dit, <R>e-edit
37fa004c 646 # edit the message
a5f75d66 647 Edit();
648 #system("$ed $filename");
649 } elsif( $action =~ /^[qc]/i ) { # <C>ancel, <Q>uit
774d564b 650 Cancel();
84478119 651 } elsif( $action =~ /^s/ ) {
652 paraprint <<EOF;
653
654I'm sorry, but I didn't understand that. Please type "send" or "save".
655EOF
37fa004c 656 }
657
658 }
659 }
660}
661
662
663sub Send {
664
665 # Message has been accepted for transmission -- Send the message
c07a80fd 666
667 if($::HaveSend) {
37fa004c 668
c07a80fd 669 $msg = new Mail::Send Subject => $subject, To => $address;
37fa004c 670
c07a80fd 671 $msg->cc($cc) if $cc;
672 $msg->add("Reply-To",$from) if $from;
37fa004c 673
c07a80fd 674 $fh = $msg->open;
675
676 open(REP,"<$filename");
677 while(<REP>) { print $fh $_ }
678 close(REP);
37fa004c 679
c07a80fd 680 $fh->close;
681
682 } else {
683 if ($Is_VMS) {
684 if ( ($address =~ /@/ and $address !~ /^\w+%"/) or
685 ($cc =~ /@/ and $cc !~ /^\w+%"/) ){
686 my($prefix);
687 foreach (qw[ IN MX SMTP UCX PONY WINS ],'') {
688 $prefix = "$_%",last if $ENV{"MAIL\$PROTOCOL_$_"};
689 }
690 $address = qq[${prefix}"$address"] unless $address =~ /^\w+%"/;
691 $cc = qq[${prefix}"$cc"] unless !$cc || $cc =~ /^\w+%"/;
692 }
693 $subject =~ s/"/""/g; $address =~ s/"/""/g; $cc =~ s/"/""/g;
694 my($sts) = system(qq[mail/Subject="$subject" $filename. "$address","$cc"]);
68dc0745 695 if ($sts) { die "Can't spawn off mail\n\t(leaving bug report in $filename): $sts\n;" }
c07a80fd 696 } else {
697 my($sendmail) = "";
698
699 foreach (qw(/usr/lib/sendmail /usr/sbin/sendmail /usr/ucblib/sendmail))
700 {
701 $sendmail = $_, last if -e $_;
702 }
703
704 paraprint <<"EOF" and die "\n" if $sendmail eq "";
705
706I am terribly sorry, but I cannot find sendmail, or a close equivalent, and
707the perl package Mail::Send has not been installed, so I can't send your bug
d121ca8c 708report. We apologize for the inconvenience.
c07a80fd 709
710So you may attempt to find some way of sending your message, it has
711been left in the file `$filename'.
712
713EOF
714
715 open(SENDMAIL,"|$sendmail -t");
716 print SENDMAIL "To: $address\n";
717 print SENDMAIL "Subject: $subject\n";
718 print SENDMAIL "Cc: $cc\n" if $cc;
719 print SENDMAIL "Reply-To: $from\n" if $from;
720 print SENDMAIL "\n\n";
721 open(REP,"<$filename");
722 while(<REP>) { print SENDMAIL $_ }
723 close(REP);
724
725 close(SENDMAIL);
726 }
37fa004c 727
c07a80fd 728 }
37fa004c 729
730 print "\nMessage sent.\n";
731
732 1 while unlink($filename); # remove all versions under VMS
733
734}
735
736sub Help {
737 print <<EOF;
738
739A program to help generate bug reports about perl5, and mail them.
740It is designed to be used interactively. Normally no arguments will
741be needed.
742
743Usage:
744$0 [-v] [-a address] [-s subject] [-b body | -f file ]
d121ca8c 745 [-r returnaddress] [-e editor] [-c adminaddress | -C] [-S] [-t] [-h]
37fa004c 746
c07a80fd 747Simplest usage: run "$0", and follow the prompts.
37fa004c 748
749Options:
750
751 -v Include Verbose configuration data in the report
752 -f File containing the body of the report. Use this to
753 quickly send a prepared message.
754 -S Send without asking for confirmation.
755 -a Address to send the report to. Defaults to `$address'.
756 -c Address to send copy of report to. Defaults to `$cc'.
757 -C Don't send copy to administrator.
758 -s Subject to include with the message. You will be prompted
759 if you don't supply one on the command line.
760 -b Body of the report. If not included on the command line, or
761 in a file with -f, you will get a chance to edit the message.
762 -r Your return address. The program will ask you to confirm
763 this if you don't give it here.
764 -e Editor to use.
765 -t Test mode. The target address defaults to `$testaddress'.
c07a80fd 766 -d Data mode (the default if you redirect or pipe output.)
767 This prints out your configuration data, without mailing
768 anything. You can use this with -v to get more complete data.
d121ca8c 769 -h Print this help message.
37fa004c 770
771EOF
772}
773
774sub paraprint {
775 my @paragraphs = split /\n{2,}/, "@_";
c07a80fd 776 print "\n\n";
37fa004c 777 for (@paragraphs) { # implicit local $_
778 s/(\S)\s*\n/$1 /g;
779 write;
780 print "\n";
781 }
782
783}
784
785
786format STDOUT =
787^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
788$_
789.
d121ca8c 790
791__END__
792
793=head1 NAME
794
795perlbug - how to submit bug reports on Perl
796
797=head1 SYNOPSIS
798
799B<perlbug> S<[ B<-v> ]> S<[ B<-a> I<address> ]> S<[ B<-s> I<subject> ]>
800S<[ B<-b> I<body> | B<-f> I<file> ]> S<[ B<-r> I<returnaddress> ]>
801S<[ B<-e> I<editor> ]> S<[ B<-c> I<adminaddress> | B<-C> ]>
802S<[ B<-S> ]> S<[ B<-t> ]> S<[ B<-d> ]> S<[ B<-h> ]>
803
804=head1 DESCRIPTION
805
806A program to help generate bug reports about perl or the modules that
807come with it, and mail them.
808
809If you have found a bug with a non-standard port (one that was not part
810of the I<standard distribution>), a binary distribution, or a
811non-standard module (such as Tk, CGI, etc), then please see the
812documentation that came with that distribution to determine the correct
813place to report bugs.
814
815C<perlbug> is designed to be used interactively. Normally no arguments
816will be needed. Simply run it, and follow the prompts.
817
818If you are unable to run B<perlbug> (most likely because you don't have
819a working setup to send mail that perlbug recognizes), you may have to
820compose your own report, and email it to B<perlbug@perl.com>. You might
821find the B<-d> option useful to get summary information in that case.
822
823In any case, when reporting a bug, please make sure you have run through
824this checklist:
825
826=over 4
827
828=item What version of perl you are running?
829
830Type C<perl -v> at the command line to find out.
831
832=item Are you running the latest released version of perl?
833
834Look at http://www.perl.com/ to find out. If it is not the latest
835released version, get that one and see whether your bug has been
836fixed. Note that bug reports about old versions of perl, especially
837those prior to the 5.0 release, are likely to fall upon deaf ears.
838You are on your own if you continue to use perl1 .. perl4.
839
840=item Are you sure what you have is a bug?
841
842A significant number of the bug reports we get turn out to be documented
843features in perl. Make sure the behavior you are witnessing doesn't fall
844under that category, by glancing through the documentation that comes
845with perl (we'll admit this is no mean task, given the sheer volume of
846it all, but at least have a look at the sections that I<seem> relevant).
847
848Be aware of the familiar traps that perl programmers of various hues
849fall into. See L<perltrap>.
850
851Try to study the problem under the perl debugger, if necessary.
852See L<perldebug>.
853
854=item Do you have a proper test case?
855
856The easier it is to reproduce your bug, the more likely it will be
857fixed, because if no one can duplicate the problem, no one can fix it.
858A good test case has most of these attributes: fewest possible number
859of lines; few dependencies on external commands, modules, or
860libraries; runs on most platforms unimpeded; and is self-documenting.
861
862A good test case is almost always a good candidate to be on the perl
863test suite. If you have the time, consider making your test case so
864that it will readily fit into the standard test suite.
865
866=item Can you describe the bug in plain English?
867
868The easier it is to understand a reproducible bug, the more likely it
869will be fixed. Anything you can provide by way of insight into the
870problem helps a great deal. In other words, try to analyse the
871problem to the extent you feel qualified and report your discoveries.
872
873=item Can you fix the bug yourself?
874
875A bug report which I<includes a patch to fix it> will almost
876definitely be fixed. Use the C<diff> program to generate your patches
877(C<diff> is being maintained by the GNU folks as part of the B<diffutils>
878package, so you should be able to get it from any of the GNU software
879repositories). If you do submit a patch, the cool-dude counter at
880perlbug@perl.com will register you as a savior of the world. Your
881patch may be returned with requests for changes, or requests for more
882detailed explanations about your fix.
883
884Here are some clues for creating quality patches: Use the B<-c> or
885B<-u> switches to the diff program (to create a so-called context or
886unified diff). Make sure the patch is not reversed (the first
887argument to diff is typically the original file, the second argument
888your changed file). Make sure you test your patch by applying it with
889the C<patch> program before you send it on its way. Try to follow the
890same style as the code you are trying to patch. Make sure your patch
891really does work (C<make test>, if the thing you're patching supports
892it).
893
894=item Can you use C<perlbug> to submit the report?
895
896B<perlbug> will, amongst other things, ensure your report includes
897crucial information about your version of perl. If C<perlbug> is unable
898to mail your report after you have typed it in, you may have to compose
899the message yourself, add the output produced by C<perlbug -d> and email
900it to B<perlbug@perl.com>. If, for some reason, you cannot run
901C<perlbug> at all on your system, be sure to include the entire output
902produced by running C<perl -V> (note the uppercase V).
903
904=back
905
906Having done your bit, please be prepared to wait, to be told the bug
907is in your code, or even to get no reply at all. The perl maintainers
908are busy folks, so if your problem is a small one or if it is
909difficult to understand, they may not respond with a personal reply.
910If it is important to you that your bug be fixed, do monitor the
911C<Changes> file in any development releases since the time you submitted
912the bug, and encourage the maintainers with kind words (but never any
913flames!). Feel free to resend your bug report if the next released
914version of perl comes out and your bug is still present.
915
916=head1 OPTIONS
917
918=over 8
919
920=item B<-a>
921
922Address to send the report to. Defaults to `perlbug@perl.com'.
923
924=item B<-b>
925
926Body of the report. If not included on the command line, or
927in a file with B<-f>, you will get a chance to edit the message.
928
929=item B<-C>
930
931Don't send copy to administrator.
932
933=item B<-c>
934
935Address to send copy of report to. Defaults to the address of the
936local perl administrator (recorded when perl was built).
937
938=item B<-d>
939
940Data mode (the default if you redirect or pipe output). This prints out
941your configuration data, without mailing anything. You can use this
942with B<-v> to get more complete data.
943
944=item B<-e>
945
946Editor to use.
947
948=item B<-f>
949
950File containing the body of the report. Use this to quickly send a
951prepared message.
952
953=item B<-h>
954
955Prints a brief summary of the options.
956
957=item B<-r>
958
959Your return address. The program will ask you to confirm its default
960if you don't use this option.
961
962=item B<-S>
963
964Send without asking for confirmation.
965
966=item B<-s>
967
968Subject to include with the message. You will be prompted if you don't
969supply one on the command line.
970
971=item B<-t>
972
973Test mode. The target address defaults to `perlbug-test@perl.com'.
974
975=item B<-v>
976
977Include verbose configuration data in the report.
978
979=back
980
981=head1 AUTHORS
982
983Kenneth Albanowski (E<lt>kjahds@kjahds.comE<gt>), subsequently I<doc>tored
984by Gurusamy Sarathy (E<lt>gsar@umich.eduE<gt>), Tom Christiansen
985(E<lt>tchrist@perl.comE<gt>), and Nathan Torkington
986(E<lt>gnat@frii.comE<gt>).
987
988=head1 SEE ALSO
989
990perl(1), perldebug(1), perltrap(1), diff(1), patch(1)
991
992=head1 BUGS
993
994None known (guess what must have been used to report them?)
995
996=cut
997
37fa004c 998!NO!SUBS!
999
1000close OUT or die "Can't close $file: $!";
1001chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
1002exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
d121ca8c 1003