X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlmod.pod;h=6cbdce3f9b6a29072e32f73fbd80c10d7c693ea6;hb=dca6e23fb83957e896abba24cceb553cbf56fb78;hp=ddcbe47e14f1f220c37b9529d83cab8388383961;hpb=b58b0d99c5cadbcc64c7b9e5da6a96109ff5dea7;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlmod.pod b/pod/perlmod.pod index ddcbe47..6cbdce3 100644 --- a/pod/perlmod.pod +++ b/pod/perlmod.pod @@ -33,7 +33,7 @@ preferred delimiter, in part because it's more readable to humans, and in part because it's more readable to B macros. It also makes C++ programmers feel like they know what's going on--as opposed to using the single quote as separator, which was there to make Ada programmers feel -like they knew what's going on. Because the old-fashioned syntax is still +like they knew what was going on. Because the old-fashioned syntax is still supported for backwards compatibility, if you try to use a string like C<"This is $owner's house">, you'll be accessing C<$owner::s>; that is, the $s variable in package C, which is probably not what you meant. @@ -45,7 +45,7 @@ name lookups, however. There are no relative packages: all symbols are either local to the current package, or must be fully qualified from the outer package name down. For instance, there is nowhere within package C that C<$INNER::var> refers to -C<$OUTER::INNER::var>. It would treat package C as a totally +C<$OUTER::INNER::var>. C refers to a totally separate global package. Only identifiers starting with letters (or underscore) are stored @@ -53,7 +53,7 @@ in a package's symbol table. All other symbols are kept in package C
, including all punctuation variables, like $_. In addition, when unqualified, the identifiers STDIN, STDOUT, STDERR, ARGV, ARGVOUT, ENV, INC, and SIG are forced to be in package C
, -even when used for other purposes than their built-in one. If you +even when used for other purposes than their built-in ones. If you have a package called C, C, or C, then you can't use the qualified form of an identifier because it would be instead interpreted as a pattern match, a substitution, or a transliteration. @@ -77,7 +77,7 @@ expressions in the context of the C
package (or wherever you came from). See L. The special symbol C<__PACKAGE__> contains the current package, but cannot -(easily) be used to construct variables. +(easily) be used to construct variable names. See L for other scoping issues related to my() and local(), and L regarding closures. @@ -153,7 +153,7 @@ it was exported: @EXPORT = qw($FOO); # Usual form, can't be localized @EXPORT = qw(*FOO); # Can be localized -You can work around the first case by using the fully qualified name +You can work around the first case by using the fully qualified name (C<$Package::FOO>) where you need a local value, or by overriding it by saying C<*FOO = *Package::FOO> in your script. @@ -185,7 +185,7 @@ Another use of symbol tables is for making "constant" scalars. Now you cannot alter C<$PI>, which is probably a good thing all in all. This isn't the same as a constant subroutine, which is subject to optimization at compile-time. A constant subroutine is one prototyped -to take no arguments and to return a constant expression. See +to take no arguments and to return a constant expression. See L for details on these. The C pragma is a convenient shorthand for these. @@ -304,7 +304,7 @@ is not. There is no special class syntax in Perl, but a package may act as a class if it provides subroutines to act as methods. Such a package may also derive some of its methods from another class (package) -by listing the other package name(s) in its global @ISA array (which +by listing the other package name(s) in its global @ISA array (which must be a package global, not a lexical). For more on this, see L and L. @@ -312,10 +312,10 @@ For more on this, see L and L. =head2 Perl Modules A module is just a set of related functions in a library file, i.e., -a Perl package with the same name as the file. It is specifically +a Perl package with the same name as the file. It is specifically designed to be reusable by other modules or programs. It may do this by providing a mechanism for exporting some of its symbols into the -symbol table of any package using it. Or it may function as a class +symbol table of any package using it, or it may function as a class definition and make its semantics available implicitly through method calls on the class and its objects, without explicitly exporting anything. Or it can do a little of both. @@ -335,7 +335,7 @@ create a file called F and start with this template: # set the version for version checking $VERSION = 1.00; # if using RCS/CVS, this may be preferred - $VERSION = do { my @r = (q$Revision: 2.21 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + $VERSION = sprintf "%d.%03d", q$Revision: 1.1 $ =~ /(\d+)/g; @ISA = qw(Exporter); @EXPORT = qw(&func1 &func2 &func4); @@ -430,7 +430,7 @@ if you're a classicist). The two statements: require SomeModule; - require "SomeModule.pm"; + require "SomeModule.pm"; differ from each other in two ways. In the first case, any double colons in the module name, such as C, are translated @@ -462,7 +462,7 @@ In general, C is recommended over C, because it determines module availability at compile time, not in the middle of your program's execution. An exception would be if two modules each tried to C each other, and each also called a function from -that other module. In that case, it's easy to use Cs instead. +that other module. In that case, it's easy to use C instead. Perl packages may be nested inside other package names, so we can have package names containing C<::>. But if we used that package name @@ -482,14 +482,15 @@ autoloading, the user can say just C to get it all. =head2 Making your module threadsafe -Perl has since 5.6.0 support for a new type of threads called -interpreter threads. These threads can be used explicitly and implicitly. +Since 5.6.0, Perl has had support for a new type of threads called +interpreter threads (ithreads). These threads can be used explicitly +and implicitly. Ithreads work by cloning the data tree so that no data is shared -between different threads. These threads can be used using the threads +between different threads. These threads can be used by using the C module or by doing fork() on win32 (fake fork() support). When a thread is cloned all Perl data is cloned, however non-Perl data cannot -be cloned automatically. Perl after 5.7.2 has support for the C +be cloned automatically. Perl after 5.7.2 has support for the C special subroutine . In C you can do whatever you need to do, like for example handle the cloning of non-Perl data, if necessary. C will be executed once for every package that has it defined