Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save gideondsouza/6811938 to your computer and use it in GitHub Desktop.
Save gideondsouza/6811938 to your computer and use it in GitHub Desktop.
0001-Updated-known_pod_issues-by-running-.-perl-podcheck..patch
From d233e024722a0d05ce9d70eeeaaffa0517579ea2 Mon Sep 17 00:00:00 2001
From: Gideon Israel Dsouza <[email protected]>
Date: Wed, 2 Oct 2013 21:12:21 +0530
Subject: [PATCH 1/3] Updated known_pod_issues by running ./perl podcheck.t
--regen
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="------------1.7.12.4 (Apple Git-37)"
This is a multi-part message in MIME format.
--------------1.7.12.4 (Apple Git-37)
Content-Type: text/plain; charset=UTF-8; format=fixed
Content-Transfer-Encoding: 8bit
---
t/porting/known_pod_issues.dat | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
--------------1.7.12.4 (Apple Git-37)
Content-Type: text/x-patch; name="0001-Updated-known_pod_issues-by-running-.-perl-podcheck..patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0001-Updated-known_pod_issues-by-running-.-perl-podcheck..patch"
diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat
index c624c6b..59d8ba4 100644
--- a/t/porting/known_pod_issues.dat
+++ b/t/porting/known_pod_issues.dat
@@ -1,4 +1,4 @@
-# This file is the data file for t/porting/podcheck.t.
+# This file is the data file for porting/podcheck.t.
# There are three types of lines.
# Comment lines are white-space only or begin with a '#', like this one. Any
# changes you make to the comment lines will be lost when the file is
@@ -200,6 +200,7 @@ dist/module-corelist/lib/module/corelist/utils.pm Verbatim line length including
dist/selfloader/lib/selfloader.pm Verbatim line length including indents exceeds 79 by 13
dist/storable/storable.pm Verbatim line length including indents exceeds 79 by 4
dist/thread-queue/lib/thread/queue.pm Verbatim line length including indents exceeds 79 by 4
+dist/threads/lib/threads.pm Pod NAME already used 1
dist/threads/lib/threads.pm Verbatim line length including indents exceeds 79 by 3
dist/tie-file/lib/tie/file.pm Verbatim line length including indents exceeds 79 by 3
ext/devel-peek/peek.pm ? Should you be using L<...> instead of 2
@@ -209,6 +210,7 @@ ext/file-glob/glob.pm Verbatim line length including indents exceeds 79 by 15
ext/pod-html/testdir/perlpodspec-copy.pod Verbatim line length including indents exceeds 79 by 8
ext/pod-html/testdir/perlvar-copy.pod ? Should you be using L<...> instead of 3
ext/pod-html/testdir/perlvar-copy.pod Verbatim line length including indents exceeds 79 by 6
+ext/posix/lib/posix.pod Apparent broken link 2
ext/vms-dclsym/dclsym.pm ? Should you be using L<...> instead of 1
ext/vms-filespec/lib/vms/filespec.pm Verbatim line length including indents exceeds 79 by 1
install ? Should you be using F<...> or maybe L<...> instead of 1
@@ -275,6 +277,20 @@ porting/todo.pod Verbatim line length including indents exceeds 79 by 7
utils/c2ph Verbatim line length including indents exceeds 79 by 44
lib/benchmark.pm Verbatim line length including indents exceeds 79 by 2
lib/config.pod ? Should you be using L<...> instead of -1
+lib/cpan/meta.pm Pod NAME already used 1
+lib/cpan/meta/converter.pm Pod NAME already used 1
+lib/cpan/meta/feature.pm Pod NAME already used 1
+lib/cpan/meta/history.pm Pod NAME already used 1
+lib/cpan/meta/prereqs.pm Pod NAME already used 1
+lib/cpan/meta/requirements.pm Pod NAME already used 1
+lib/cpan/meta/spec.pm Pod NAME already used 1
+lib/cpan/meta/validator.pm Pod NAME already used 1
+lib/cpan/meta/yaml.pm Pod NAME already used 1
lib/extutils/embed.pm Verbatim line length including indents exceeds 79 by 2
+lib/file/temp.pm Pod NAME already used 1
+lib/http/tiny.pm Pod NAME already used 1
+lib/parse/cpan/meta.pm Pod NAME already used 1
+lib/perl/ostype.pm Pod NAME already used 1
lib/perl5db.pl ? Should you be using L<...> instead of 1
lib/pod/text/overstrike.pm Verbatim line length including indents exceeds 79 by 1
+lib/threads.pm Pod NAME already used 1
--------------1.7.12.4 (Apple Git-37)--
From f368e67f7b33c184e48bf969aa31488992ca9913 Mon Sep 17 00:00:00 2001
From: Gideon Israel Dsouza <[email protected]>
Date: Thu, 3 Oct 2013 01:18:42 +0530
Subject: [PATCH 2/3] Fixed 27 issues reported when running podcheck.t
--pendantic on perlembed.pod
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="------------1.7.12.4 (Apple Git-37)"
This is a multi-part message in MIME format.
--------------1.7.12.4 (Apple Git-37)
Content-Type: text/plain; charset=UTF-8; format=fixed
Content-Transfer-Encoding: 8bit
The 27 issues fixed were mostly extra long lines that were broken.
Verbatim sections were given a single leading space instead of several
where needed.
---
pod/perlembed.pod | 251 ++++++++++++++++++++++++++++--------------------------
1 file changed, 132 insertions(+), 119 deletions(-)
--------------1.7.12.4 (Apple Git-37)
Content-Type: text/x-patch; name="0002-Fixed-27-issues-reported-when-running-podcheck.t-pen.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0002-Fixed-27-issues-reported-when-running-podcheck.t-pen.patch"
diff --git a/pod/perlembed.pod b/pod/perlembed.pod
index 979c944..6e6852b 100644
--- a/pod/perlembed.pod
+++ b/pod/perlembed.pod
@@ -176,13 +176,13 @@ In a sense, perl (the C program) is a good example of embedding Perl
included in the source distribution. Here's a bastardized, non-portable
version of I<miniperlmain.c> containing the essentials of embedding:
- #include <EXTERN.h> /* from the Perl distribution */
- #include <perl.h> /* from the Perl distribution */
+ #include <EXTERN.h> /* from the Perl distribution */
+ #include <perl.h> /* from the Perl distribution */
- static PerlInterpreter *my_perl; /*** The Perl interpreter ***/
+ static PerlInterpreter *my_perl; /*** The Perl interpreter ***/
- int main(int argc, char **argv, char **env)
- {
+ int main(int argc, char **argv, char **env)
+ {
PERL_SYS_INIT3(&argc,&argv,&env);
my_perl = perl_alloc();
perl_construct(my_perl);
@@ -192,7 +192,7 @@ version of I<miniperlmain.c> containing the essentials of embedding:
perl_destruct(my_perl);
perl_free(my_perl);
PERL_SYS_TERM();
- }
+ }
Notice that we don't use the C<env> pointer. Normally handed to
C<perl_parse> as its final argument, C<env> here is replaced by
@@ -272,18 +272,18 @@ I<G_DISCARD>). Those flags, and others, are discussed in L<perlcall>.
I'll define the I<showtime> subroutine in a file called I<showtime.pl>:
- print "I shan't be printed.";
+ print "I shan't be printed.";
- sub showtime {
- print time;
- }
-
-Simple enough. Now compile and run:
+ sub showtime {
+ print time;
+ }
- % cc -o showtime showtime.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
+Simple enough. Now compile and run:
- % showtime showtime.pl
- 818284590
+ % cc -o showtime showtime.c \
+ `perl -MExtUtils::Embed -e ccopts -e ldopts`
+ % showtime showtime.pl
+ 818284590
yielding the number of seconds that elapsed between January 1, 1970
(the beginning of the Unix epoch), and the moment I began writing this
@@ -315,41 +315,43 @@ extract variables for coercion into C types. The following program,
I<string.c>, executes three Perl strings, extracting an C<int> from
the first, a C<float> from the second, and a C<char *> from the third.
- #include <EXTERN.h>
- #include <perl.h>
-
- static PerlInterpreter *my_perl;
-
- main (int argc, char **argv, char **env)
- {
- char *embedding[] = { "", "-e", "0" };
-
- PERL_SYS_INIT3(&argc,&argv,&env);
- my_perl = perl_alloc();
- perl_construct( my_perl );
-
- perl_parse(my_perl, NULL, 3, embedding, NULL);
- PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
- perl_run(my_perl);
-
- /** Treat $a as an integer **/
- eval_pv("$a = 3; $a **= 2", TRUE);
- printf("a = %d\n", SvIV(get_sv("a", 0)));
-
- /** Treat $a as a float **/
- eval_pv("$a = 3.14; $a **= 2", TRUE);
- printf("a = %f\n", SvNV(get_sv("a", 0)));
-
- /** Treat $a as a string **/
- eval_pv("$a = 'rekcaH lreP rehtonA tsuJ'; $a = reverse($a);", TRUE);
- printf("a = %s\n", SvPV_nolen(get_sv("a", 0)));
-
- perl_destruct(my_perl);
- perl_free(my_perl);
- PERL_SYS_TERM();
- }
+ #include <EXTERN.h>
+ #include <perl.h>
+
+ static PerlInterpreter *my_perl;
+
+ main (int argc, char **argv, char **env)
+ {
+ char *embedding[] = { "", "-e", "0" };
+
+ PERL_SYS_INIT3(&argc,&argv,&env);
+ my_perl = perl_alloc();
+ perl_construct( my_perl );
+
+ perl_parse(my_perl, NULL, 3, embedding, NULL);
+ PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
+ perl_run(my_perl);
+
+ /** Treat $a as an integer **/
+ eval_pv("$a = 3; $a **= 2", TRUE);
+ printf("a = %d\n", SvIV(get_sv("a", 0)));
+
+ /** Treat $a as a float **/
+ eval_pv("$a = 3.14; $a **= 2", TRUE);
+ printf("a = %f\n", SvNV(get_sv("a", 0)));
+
+ /** Treat $a as a string **/
+ eval_pv(
+ "$a = 'rekcaH lreP rehtonA tsuJ'; $a = reverse($a);", TRUE);
+ printf("a = %s\n", SvPV_nolen(get_sv("a", 0)));
+
+ perl_destruct(my_perl);
+ perl_free(my_perl);
+ PERL_SYS_TERM();
+ }
-All of those strange functions with I<sv> in their names help convert Perl scalars to C types. They're described in L<perlguts> and L<perlapi>.
+All of those strange functions with I<sv> in their names help convert Perl
+scalars to C types. They're described in L<perlguts> and L<perlapi>.
If you compile and run I<string.c>, you'll see the results of using
I<SvIV()> to create an C<int>, I<SvNV()> to create a C<float>, and
@@ -388,14 +390,15 @@ returns 1 if the string matches the pattern and 0 otherwise.
Given a pointer to an C<SV> and an C<=~> operation (e.g.,
C<s/bob/robert/g> or C<tr[A-Z][a-z]>), substitute() modifies the string
-within the C<SV> as according to the operation, returning the number of substitutions
-made.
+within the C<SV> as according to the operation, returning the number of
+substitutions made.
SSize_t matches(SV *string, char *pattern, AV **matches);
Given an C<SV>, a pattern, and a pointer to an empty C<AV>,
matches() evaluates C<$string =~ $pattern> in a list context, and
-fills in I<matches> with the array elements, returning the number of matches found.
+fills in I<matches> with the array elements, returning the number of matches
+found.
Here's a sample program, I<match.c>, that uses all three (long lines have
been wrapped here):
@@ -450,7 +453,8 @@ been wrapped here):
/** substitute(string, pattern)
**
- ** Used for =~ operations that modify their left-hand side (s/// and tr///)
+ ** Used for =~ operations that
+ ** modify their left-hand side (s/// and tr///)
**
** Returns the number of successful matches, and
** modifies the input string if there were any.
@@ -535,7 +539,8 @@ been wrapped here):
printf("matches: m/(wi..)/g found %d matches...\n", num_matches);
for (i = 0; i < num_matches; i++)
- printf("match: %s\n", SvPV_nolen(*av_fetch(match_list, i, FALSE)));
+ printf("match: %s\n",
+ SvPV_nolen(*av_fetch(match_list, i, FALSE)));
printf("\n");
/** Remove all vowels from text **/
@@ -560,22 +565,23 @@ been wrapped here):
which produces the output (again, long lines have been wrapped here)
- match: Text contains the word 'quarter'.
+ match: Text contains the word 'quarter'.
- match: Text doesn't contain the word 'eighth'.
+ match: Text doesn't contain the word 'eighth'.
- matches: m/(wi..)/g found 2 matches...
- match: will
- match: with
+ matches: m/(wi..)/g found 2 matches...
+ match: will
+ match: with
- substitute: s/[aeiou]//gi...139 substitutions made.
- Now text is: Whn h s t cnvnnc str nd th bll cms t sm mnt lk 76 cnts,
- Mynrd s wr tht thr s smthng h *shld* d, smthng tht wll nbl hm t gt bck
- qrtr, bt h hs n d *wht*. H fmbls thrgh hs rd sqzy chngprs nd gvs th by
- thr xtr pnns wth hs dllr, hpng tht h mght lck nt th crrct mnt. Th by gvs
- hm bck tw f hs wn pnns nd thn th bg shny qrtr tht s hs prz. -RCHH
+ substitute: s/[aeiou]//gi...139 substitutions made.
+ Now text is: Whn h s t cnvnnc str nd th bll cms t sm mnt lk 76 cnts,
+ Mynrd s wr tht thr s smthng h *shld* d, smthng tht wll nbl hm t gt
+ bck qrtr, bt h hs n d *wht*. H fmbls thrgh hs rd sqzy chngprs nd
+ gvs th by thr xtr pnns wth hs dllr, hpng tht h mght lck nt th crrct
+ mnt. Th by gvs hm bck tw f hs wn pnns nd thn th bg shny qrtr tht s
+ hs prz. -RCHH
- substitute: s/Perl/C...No substitution made.
+ substitute: s/Perl/C...No substitution made.
=head2 Fiddling with the Perl stack from your C program
@@ -610,48 +616,48 @@ I<PerlPower()> that contains all the perlguts necessary to push the
two arguments into I<expo()> and to pop the return value out. Take a
deep breath...
- #include <EXTERN.h>
- #include <perl.h>
-
- static PerlInterpreter *my_perl;
-
- static void
- PerlPower(int a, int b)
- {
- dSP; /* initialize stack pointer */
- ENTER; /* everything created after here */
- SAVETMPS; /* ...is a temporary variable. */
- PUSHMARK(SP); /* remember the stack pointer */
- XPUSHs(sv_2mortal(newSViv(a))); /* push the base onto the stack */
- XPUSHs(sv_2mortal(newSViv(b))); /* push the exponent onto stack */
- PUTBACK; /* make local stack pointer global */
- call_pv("expo", G_SCALAR); /* call the function */
- SPAGAIN; /* refresh stack pointer */
- /* pop the return value from stack */
- printf ("%d to the %dth power is %d.\n", a, b, POPi);
- PUTBACK;
- FREETMPS; /* free that return value */
- LEAVE; /* ...and the XPUSHed "mortal" args.*/
- }
-
- int main (int argc, char **argv, char **env)
- {
- char *my_argv[] = { "", "power.pl" };
-
- PERL_SYS_INIT3(&argc,&argv,&env);
- my_perl = perl_alloc();
- perl_construct( my_perl );
-
- perl_parse(my_perl, NULL, 2, my_argv, (char **)NULL);
- PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
- perl_run(my_perl);
-
- PerlPower(3, 4); /*** Compute 3 ** 4 ***/
-
- perl_destruct(my_perl);
- perl_free(my_perl);
- PERL_SYS_TERM();
- }
+ #include <EXTERN.h>
+ #include <perl.h>
+
+ static PerlInterpreter *my_perl;
+
+ static void
+ PerlPower(int a, int b)
+ {
+ dSP; /* initialize stack pointer */
+ ENTER; /* everything created after here */
+ SAVETMPS; /* ...is a temporary variable. */
+ PUSHMARK(SP); /* remember the stack pointer */
+ XPUSHs(sv_2mortal(newSViv(a))); /* push the base onto the stack */
+ XPUSHs(sv_2mortal(newSViv(b))); /* push the exponent onto stack */
+ PUTBACK; /* make local stack pointer global */
+ call_pv("expo", G_SCALAR); /* call the function */
+ SPAGAIN; /* refresh stack pointer */
+ /* pop the return value from stack */
+ printf ("%d to the %dth power is %d.\n", a, b, POPi);
+ PUTBACK;
+ FREETMPS; /* free that return value */
+ LEAVE; /* ...and the XPUSHed "mortal" args.*/
+ }
+
+ int main (int argc, char **argv, char **env)
+ {
+ char *my_argv[] = { "", "power.pl" };
+
+ PERL_SYS_INIT3(&argc,&argv,&env);
+ my_perl = perl_alloc();
+ perl_construct( my_perl );
+
+ perl_parse(my_perl, NULL, 2, my_argv, (char **)NULL);
+ PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
+ perl_run(my_perl);
+
+ PerlPower(3, 4); /*** Compute 3 ** 4 ***/
+
+ perl_destruct(my_perl);
+ perl_free(my_perl);
+ PERL_SYS_TERM();
+ }
@@ -771,7 +777,9 @@ with L<perlfunc/my> whenever possible.
#include <EXTERN.h>
#include <perl.h>
- /* 1 = clean out filename's symbol table after each request, 0 = don't */
+ /* 1 = clean out filename's symbol table after each request,
+ 0 = don't
+ */
#ifndef DO_CLEAN
#define DO_CLEAN 0
#endif
@@ -795,7 +803,8 @@ with L<perlfunc/my> whenever possible.
}
perl_construct(my_perl);
- PL_origalen = 1; /* don't let $0 assignment update the proctitle or embedding[0] */
+ PL_origalen = 1; /* don't let $0 assignment update the
+ proctitle or embedding[0] */
exitstatus = perl_parse(my_perl, NULL, 2, embedding, NULL);
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
if(!exitstatus) {
@@ -805,7 +814,8 @@ with L<perlfunc/my> whenever possible.
fgets(filename, BUFFER_SIZE, stdin)) {
filename[strlen(filename)-1] = '\0'; /* strip \n */
- /* call the subroutine, passing it the filename as an argument */
+ /* call the subroutine,
+ passing it the filename as an argument */
args[0] = filename;
call_argv("Embed::Persistent::eval_file",
G_DISCARD | G_EVAL, args);
@@ -825,7 +835,8 @@ with L<perlfunc/my> whenever possible.
Now compile:
- % cc -o persistent persistent.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
+ % cc -o persistent persistent.c \
+ `perl -MExtUtils::Embed -e ccopts -e ldopts`
Here's an example script file:
@@ -983,7 +994,8 @@ the more esoteric perl_clone()).
Compile as usual:
- % cc -o multiplicity multiplicity.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
+ % cc -o multiplicity multiplicity.c \
+ `perl -MExtUtils::Embed -e ccopts -e ldopts`
Run it, Run it:
@@ -991,11 +1003,12 @@ Run it, Run it:
Hi, I'm one_perl
Hi, I'm two_perl
-=head2 Using Perl modules, which themselves use C libraries, from your C program
+=head2 Using Perl modules, which themselves use C libraries, from your C
+program
If you've played with the examples above and tried to embed a script
-that I<use()>s a Perl module (such as I<Socket>) which itself uses a C or C++ library,
-this probably happened:
+that I<use()>s a Perl module (such as I<Socket>) which itself uses a C or C++
+library, this probably happened:
Can't load module Socket, dynamic loading not available in this perl.
@@ -1011,9 +1024,9 @@ calling I<perl_parse()>, handing it NULL for the second argument:
perl_parse(my_perl, NULL, argc, my_argv, NULL);
-That's where the glue code can be inserted to create the initial contact between
-Perl and linked C/C++ routines. Let's take a look some pieces of I<perlmain.c>
-to see how Perl does this:
+That's where the glue code can be inserted to create the initial contact
+between Perl and linked C/C++ routines. Let's take a look some pieces of
+I<perlmain.c> to see how Perl does this:
static void xs_init (pTHX);
--------------1.7.12.4 (Apple Git-37)--
From 094fb77baa6ade357190e1091b035892b1f1d45b Mon Sep 17 00:00:00 2001
From: Gideon Israel Dsouza <[email protected]>
Date: Thu, 3 Oct 2013 01:33:42 +0530
Subject: [PATCH 3/3] Updated known_pod_issues.dat by running ./perl
porting/podcheck.t --regen
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="------------1.7.12.4 (Apple Git-37)"
This is a multi-part message in MIME format.
--------------1.7.12.4 (Apple Git-37)
Content-Type: text/plain; charset=UTF-8; format=fixed
Content-Transfer-Encoding: 8bit
The known_pod_issues.dat file now doesn't have an entry for
perlembed.pod.
---
t/porting/known_pod_issues.dat | 1 -
1 file changed, 1 deletion(-)
--------------1.7.12.4 (Apple Git-37)
Content-Type: text/x-patch; name="0003-Updated-known_pod_issues.dat-by-running-.-perl-porti.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0003-Updated-known_pod_issues.dat-by-running-.-perl-porti.patch"
diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat
index 59d8ba4..a209d64 100644
--- a/t/porting/known_pod_issues.dat
+++ b/t/porting/known_pod_issues.dat
@@ -232,7 +232,6 @@ pod/perldebug.pod Verbatim line length including indents exceeds 79 by 3
pod/perldsc.pod Verbatim line length including indents exceeds 79 by 4
pod/perldtrace.pod Verbatim line length including indents exceeds 79 by 26
pod/perlebcdic.pod Verbatim line length including indents exceeds 79 by 13
-pod/perlembed.pod Verbatim line length including indents exceeds 79 by 27
pod/perlfunc.pod ? Should you be using F<...> or maybe L<...> instead of 1
pod/perlgit.pod Verbatim line length including indents exceeds 79 by 12
pod/perlgpl.pod Verbatim line length including indents exceeds 79 by 50
--------------1.7.12.4 (Apple Git-37)--
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment