xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/lib/English.pm (revision 0:68f95e015346)
1package English;
2
3our $VERSION = '1.01';
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			= *-{ARRAY} ;
150	*LAST_MATCH_END				= *+{ARRAY} ;
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;
231