xref: /openbsd-src/gnu/usr.bin/perl/lib/English.pm (revision a28daedfc357b214be5c701aa8ba8adb29a7f1c2)
1package English;
2
3our $VERSION = '1.04';
4
5require Exporter;
6@ISA = qw(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	*COMPILING
118	*DEBUGGING
119	*SYSTEM_FD_MAX
120	*INPLACE_EDIT
121	*PERLDB
122	*BASETIME
123	*WARNING
124	*EXECUTABLE_NAME
125	*OSNAME
126	*LAST_REGEXP_CODE_RESULT
127	*EXCEPTIONS_BEING_CAUGHT
128	*LAST_SUBMATCH_RESULT
129	@LAST_MATCH_START
130	@LAST_MATCH_END
131);
132
133
134@MATCH_EXPORT = qw(
135	*MATCH
136	*PREMATCH
137	*POSTMATCH
138);
139
140@COMPLETE_EXPORT = ( @MINIMAL_EXPORT, @MATCH_EXPORT ) ;
141
142# The ground of all being. @ARG is deprecated (5.005 makes @_ lexical)
143
144	*ARG					= *_	;
145
146# Matching.
147
148	*LAST_PAREN_MATCH			= *+	;
149	*LAST_SUBMATCH_RESULT			= *^N ;
150	*LAST_MATCH_START			= *-{ARRAY} ;
151	*LAST_MATCH_END				= *+{ARRAY} ;
152
153# Input.
154
155	*INPUT_LINE_NUMBER			= *.	;
156	    *NR					= *.	;
157	*INPUT_RECORD_SEPARATOR			= */	;
158	    *RS					= */	;
159
160# Output.
161
162	*OUTPUT_AUTOFLUSH			= *|	;
163	*OUTPUT_FIELD_SEPARATOR			= *,	;
164	    *OFS				= *,	;
165	*OUTPUT_RECORD_SEPARATOR		= *\	;
166	    *ORS				= *\	;
167
168# Interpolation "constants".
169
170	*LIST_SEPARATOR				= *"	;
171	*SUBSCRIPT_SEPARATOR			= *;	;
172	    *SUBSEP				= *;	;
173
174# Formats
175
176	*FORMAT_PAGE_NUMBER			= *%	;
177	*FORMAT_LINES_PER_PAGE			= *=	;
178	*FORMAT_LINES_LEFT			= *-	;
179	*FORMAT_NAME				= *~	;
180	*FORMAT_TOP_NAME			= *^	;
181	*FORMAT_LINE_BREAK_CHARACTERS		= *:	;
182	*FORMAT_FORMFEED			= *^L	;
183
184# Error status.
185
186	*CHILD_ERROR				= *?	;
187	*OS_ERROR				= *!	;
188	    *ERRNO				= *!	;
189	*OS_ERROR				= *!	;
190	    *ERRNO				= *!	;
191	*EXTENDED_OS_ERROR			= *^E	;
192	*EVAL_ERROR				= *@	;
193
194# Process info.
195
196	*PROCESS_ID				= *$	;
197	    *PID				= *$	;
198	*REAL_USER_ID				= *<	;
199	    *UID				= *<	;
200	*EFFECTIVE_USER_ID			= *>	;
201	    *EUID				= *>	;
202	*REAL_GROUP_ID				= *(	;
203	    *GID				= *(	;
204	*EFFECTIVE_GROUP_ID			= *)	;
205	    *EGID				= *)	;
206	*PROGRAM_NAME				= *0	;
207
208# Internals.
209
210	*PERL_VERSION				= *^V	;
211	*ACCUMULATOR				= *^A	;
212	*COMPILING				= *^C	;
213	*DEBUGGING				= *^D	;
214	*SYSTEM_FD_MAX				= *^F	;
215	*INPLACE_EDIT				= *^I	;
216	*PERLDB					= *^P	;
217	*LAST_REGEXP_CODE_RESULT		= *^R	;
218	*EXCEPTIONS_BEING_CAUGHT		= *^S	;
219	*BASETIME				= *^T	;
220	*WARNING				= *^W	;
221	*EXECUTABLE_NAME			= *^X	;
222	*OSNAME					= *^O	;
223
224# Deprecated.
225
226#	*ARRAY_BASE				= *[	;
227#	*OFMT					= *#	;
228#	*OLD_PERL_VERSION			= *]	;
229
2301;
231