source: trunk/third/perl/lib/English.pm @ 18450

Revision 18450, 4.4 KB checked in by zacheiss, 21 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18449, which included commits to RCS files with non-trunk default branches.
Line 
1package English;
2
3our $VERSION = '1.00';
4
5require Exporter;
6@ISA = (Exporter);
7
8=head1 NAME
9
10English - use nice English (or awk) names for ugly punctuation variables
11
12=head1 SYNOPSIS
13
14    use English qw( -no_match_vars ) ;  # Avoids regex performance penalty
15    use English;
16    ...
17    if ($ERRNO =~ /denied/) { ... }
18
19=head1 DESCRIPTION
20
21This module provides aliases for the built-in variables whose
22names no one seems to like to read.  Variables with side-effects
23which get triggered just by accessing them (like $0) will still
24be affected.
25
26For those variables that have an B<awk> version, both long
27and short English alternatives are provided.  For example,
28the C<$/> variable can be referred to either $RS or
29$INPUT_RECORD_SEPARATOR if you are using the English module.
30
31See L<perlvar> for a complete list of these.
32
33=head1 PERFORMANCE
34
35This module can provoke sizeable inefficiencies for regular expressions,
36due to unfortunate implementation details.  If performance matters in
37your application and you don't need $PREMATCH, $MATCH, or $POSTMATCH,
38try doing
39
40   use English qw( -no_match_vars ) ;
41
42.  B<It is especially important to do this in modules to avoid penalizing
43all applications which use them.>
44
45=cut
46
47no warnings;
48
49my $globbed_match ;
50
51# Grandfather $NAME import
52sub import {
53    my $this = shift;
54    my @list = grep { ! /^-no_match_vars$/ } @_ ;
55    local $Exporter::ExportLevel = 1;
56    if ( @_ == @list ) {
57        *EXPORT = \@COMPLETE_EXPORT ;
58        $globbed_match ||= (
59            eval q{
60                *MATCH                          = \$&   ;
61                *PREMATCH                               = \$`   ;
62                *POSTMATCH                              = \$'   ;
63                1 ;
64               }
65            || do {
66                require Carp ;
67                Carp::croak "Can't create English for match leftovers: $@" ;
68            }
69        ) ;
70    }
71    else {
72        *EXPORT = \@MINIMAL_EXPORT ;
73    }
74    Exporter::import($this,grep {s/^\$/*/} @list);
75}
76
77@MINIMAL_EXPORT = qw(
78        *ARG
79        *LAST_PAREN_MATCH
80        *INPUT_LINE_NUMBER
81        *NR
82        *INPUT_RECORD_SEPARATOR
83        *RS
84        *OUTPUT_AUTOFLUSH
85        *OUTPUT_FIELD_SEPARATOR
86        *OFS
87        *OUTPUT_RECORD_SEPARATOR
88        *ORS
89        *LIST_SEPARATOR
90        *SUBSCRIPT_SEPARATOR
91        *SUBSEP
92        *FORMAT_PAGE_NUMBER
93        *FORMAT_LINES_PER_PAGE
94        *FORMAT_LINES_LEFT
95        *FORMAT_NAME
96        *FORMAT_TOP_NAME
97        *FORMAT_LINE_BREAK_CHARACTERS
98        *FORMAT_FORMFEED
99        *CHILD_ERROR
100        *OS_ERROR
101        *ERRNO
102        *EXTENDED_OS_ERROR
103        *EVAL_ERROR
104        *PROCESS_ID
105        *PID
106        *REAL_USER_ID
107        *UID
108        *EFFECTIVE_USER_ID
109        *EUID
110        *REAL_GROUP_ID
111        *GID
112        *EFFECTIVE_GROUP_ID
113        *EGID
114        *PROGRAM_NAME
115        *PERL_VERSION
116        *ACCUMULATOR
117        *DEBUGGING
118        *SYSTEM_FD_MAX
119        *INPLACE_EDIT
120        *PERLDB
121        *BASETIME
122        *WARNING
123        *EXECUTABLE_NAME
124        *OSNAME
125        *LAST_REGEXP_CODE_RESULT
126        *EXCEPTIONS_BEING_CAUGHT
127        *LAST_SUBMATCH_RESULT
128        @LAST_MATCH_START
129        @LAST_MATCH_END
130);
131
132
133@MATCH_EXPORT = qw(
134        *MATCH
135        *PREMATCH
136        *POSTMATCH
137);
138
139@COMPLETE_EXPORT = ( @MINIMAL_EXPORT, @MATCH_EXPORT ) ;
140
141# The ground of all being. @ARG is deprecated (5.005 makes @_ lexical)
142
143        *ARG                                    = *_    ;
144
145# Matching.
146
147        *LAST_PAREN_MATCH                       = \$+   ;
148        *LAST_SUBMATCH_RESULT                   = \$^N ;
149        *LAST_MATCH_START                       = \@- ;
150        *LAST_MATCH_END                         = \@+ ;
151
152# Input.
153
154        *INPUT_LINE_NUMBER                      = \$.   ;
155            *NR                                 = \$.   ;
156        *INPUT_RECORD_SEPARATOR                 = \$/   ;
157            *RS                                 = \$/   ;
158
159# Output.
160
161        *OUTPUT_AUTOFLUSH                       = \$|   ;
162        *OUTPUT_FIELD_SEPARATOR                 = \$,   ;
163            *OFS                                = \$,   ;
164        *OUTPUT_RECORD_SEPARATOR                = \$\   ;
165            *ORS                                = \$\   ;
166
167# Interpolation "constants".
168
169        *LIST_SEPARATOR                         = \$"   ;
170        *SUBSCRIPT_SEPARATOR                    = \$;   ;
171            *SUBSEP                             = \$;   ;
172
173# Formats
174
175        *FORMAT_PAGE_NUMBER                     = \$%   ;
176        *FORMAT_LINES_PER_PAGE                  = \$=   ;
177        *FORMAT_LINES_LEFT                      = \$-   ;
178        *FORMAT_NAME                            = \$~   ;
179        *FORMAT_TOP_NAME                        = \$^   ;
180        *FORMAT_LINE_BREAK_CHARACTERS           = \$:   ;
181        *FORMAT_FORMFEED                        = \$^L  ;
182
183# Error status.
184
185        *CHILD_ERROR                            = \$?   ;
186        *OS_ERROR                               = \$!   ;
187            *ERRNO                              = \$!   ;
188        *OS_ERROR                               = \%!   ;
189            *ERRNO                              = \%!   ;
190        *EXTENDED_OS_ERROR                      = \$^E  ;
191        *EVAL_ERROR                             = \$@   ;
192
193# Process info.
194
195        *PROCESS_ID                             = \$$   ;
196            *PID                                = \$$   ;
197        *REAL_USER_ID                           = \$<   ;
198            *UID                                = \$<   ;
199        *EFFECTIVE_USER_ID                      = \$>   ;
200            *EUID                               = \$>   ;
201        *REAL_GROUP_ID                          = \$(   ;
202            *GID                                = \$(   ;
203        *EFFECTIVE_GROUP_ID                     = \$)   ;
204            *EGID                               = \$)   ;
205        *PROGRAM_NAME                           = \$0   ;
206
207# Internals.
208
209        *PERL_VERSION                           = \$^V  ;
210        *ACCUMULATOR                            = \$^A  ;
211        *COMPILING                              = \$^C  ;
212        *DEBUGGING                              = \$^D  ;
213        *SYSTEM_FD_MAX                          = \$^F  ;
214        *INPLACE_EDIT                           = \$^I  ;
215        *PERLDB                                 = \$^P  ;
216        *LAST_REGEXP_CODE_RESULT                = \$^R  ;
217        *EXCEPTIONS_BEING_CAUGHT                = \$^S  ;
218        *BASETIME                               = \$^T  ;
219        *WARNING                                = \$^W  ;
220        *EXECUTABLE_NAME                        = \$^X  ;
221        *OSNAME                                 = \$^O  ;
222
223# Deprecated.
224
225#       *ARRAY_BASE                             = \$[   ;
226#       *OFMT                                   = \$#   ;
227#       *MULTILINE_MATCHING                     = \$*   ;
228#       *OLD_PERL_VERSION                       = \$]   ;
229
2301;
Note: See TracBrowser for help on using the repository browser.