1=encoding utf-8
2
3=head1 NAME
4
5perlexperiment - A listing of experimental features in Perl
6
7=head1 DESCRIPTION
8
9This document lists the current and past experimental features in the perl
10core. Although all of these are documented with their appropriate topics,
11this succinct listing gives you an overview and basic facts about their
12status.
13
14So far we've merely tried to find and list the experimental features and infer
15their inception, versions, etc. There's a lot of speculation here.
16
17=head2 Current experiments
18
19=over 8
20
21=item Smart match (C<~~>)
22
23Introduced in Perl 5.10.0
24
25Modified in Perl 5.10.1, 5.12.0
26
27Deprecated in 5.38.0
28
29Will be removed in 5.42.0
30
31Using this feature triggers warnings in the category
32C<deprecated>.
33
34The ticket for this experiment is
35L<[perl #13173]|https://github.com/Perl/perl5/issues/13173>.
36
37=item Pluggable keywords
38
39Introduced in Perl 5.11.2
40
41See L<perlapi/PL_keyword_plugin> for the mechanism.
42
43The ticket for this experiment is
44L<[perl #13199]|https://github.com/Perl/perl5/issues/13199>.
45
46=item Aliasing via reference
47
48Introduced in Perl 5.22.0
49
50Using this feature triggers warnings in the category
51C<experimental::refaliasing>.
52
53The ticket for this experiment is
54L<[perl #14150]|https://github.com/Perl/perl5/issues/14150>.
55
56See also: L<perlref/Assigning to References>
57
58=item use re 'strict';
59
60Introduced in Perl 5.22.0
61
62Using this feature triggers warnings in the category
63C<experimental::re_strict>.
64
65The ticket for this experiment is
66L<[perl #18755]|https://github.com/Perl/perl5/issues/18755>
67
68See L<re/'strict' mode>
69
70=item Declaring a reference to a variable
71
72Introduced in Perl 5.26.0
73
74Using this feature triggers warnings in the category
75C<experimental::declared_refs>.
76
77The ticket for this experiment is
78L<[perl #15458]|https://github.com/Perl/perl5/issues/15458>.
79
80See also: L<perlref/Declaring a Reference to a Variable>
81
82=item There is an C<installhtml> target in the Makefile.
83
84The ticket for this experiment is
85L<[perl #12726]|https://github.com/Perl/perl5/issues/12726>.
86
87=item (Limited) Variable-length look-behind
88
89Introduced in Perl 5.30.0.
90
91Variability of up to 255 characters is handled.
92
93Using this feature triggers warnings in the category
94C<experimental::vlb>.
95
96The ticket for this experiment is
97L<[perl #18756]|https://github.com/Perl/perl5/issues/18756>.
98
99See also: L<perlre/(*positive_lookbehind:I<pattern>)> and
100L<perlre/(*negative_lookbehind:I<pattern>)>
101
102=item Unicode private use character hooks
103
104Introduced in Perl 5.30.0.
105
106This feature is part of an interface intended for internal and experimental
107use by the perl5 developers.  You are unlikely to encounter it in the wild.
108
109Using this feature triggers warnings in the category
110C<experimental::private_use>.
111
112The ticket for this experiment is
113L<[perl #18758]|https://github.com/Perl/perl5/issues/18758>.
114
115=item Unicode property wildcards
116
117Introduced in Perl 5.30.0.
118
119This feature allows regular expression matching against Unicode character
120properties to be expressed more concisely.
121
122Using this feature triggers warnings in the category
123C<experimental::uniprop_wildcards>.
124
125The ticket for this experiment is
126L<[perl #18759]|https://github.com/Perl/perl5/issues/18759>.
127
128=item try/catch control structure
129
130Introduced in Perl 5.34.0.
131
132Using the optional C<finally> block part of this feature triggers warnings in
133the category C<experimental::try>.
134
135The ticket for this experiment is
136L<[perl #18760]|https://github.com/Perl/perl5/issues/18760>
137
138=item Use of C<@_> within subroutine signatures
139
140Introduced in Perl 5.36.0 as part of a reduction in the scope of experimental
141subroutine signatures.
142
143Using the default arguments array (C<@_>) within a subroutine that uses
144signatures will emit a warning in the category
145C<experimental::args_array_with_signatures>. This includes C<@_> directly,
146elements of it such as C<$_[$index]>, or situations where the default
147arguments array is accessed implicitly such as C<shift> or C<pop> without
148arguments.
149
150=item The builtin namespace
151
152Introduced in Perl 5.36.0.
153
154Using certain functions of this feature triggers warnings in the category
155C<experimental::builtin>.
156
157In Perl 5.36.0, a new namespace, C<builtin>, was created for new core functions
158that will not be present in every namespace, but will be available for
159importing.  The namespace itself was considered experimental until Perl 5.39.2.
160Some specific functions within it remain experimental.
161
162The ticket for this experiment is
163L<[perl #19764]|https://github.com/Perl/perl5/issues/19764>.
164
165=item The defer block modifier
166
167Introduced in Perl 5.36.0
168
169Using this feature triggers warnings in the category C<experimental::defer>.
170
171This feature adds a new kind of block, a C<defer> block, which will not be
172executed until the containing block is being exited.
173
174The ticket for this experiment is
175L<[perl #17949]|https://github.com/Perl/perl5/issues/17949>.
176
177=item Extra paired delimiters for quote-like operators
178
179Introduced in Perl 5.36.0
180
181Using this feature triggers warnings in the category
182C<experimental::extra_paired_delimiters>.
183
184This feature allows for many non-ASCII pairs of mirroring delimiters, for
185example:
186
187    my @array = qw« tinker tailor soldier spy »;
188
189The ticket for this experiment is
190L<[perl #19765]|https://github.com/Perl/perl5/issues/19765>.
191
192=back
193
194=head2 Accepted features
195
196These features were so wildly successful and played so well with others that
197we decided to remove their experimental status and admit them as full, stable
198features in the world of Perl, lavishing all the benefits and luxuries thereof.
199They are also awarded +5 Stability and +3 Charisma.
200
201=over 8
202
203=item 64-bit support
204
205Introduced in Perl 5.005
206
207=item die accepts a reference
208
209Introduced in Perl 5.005
210
211=item DB module
212
213Introduced in Perl 5.6.0
214
215See also L<perldebug>, L<perldebtut>
216
217=item Weak references
218
219Introduced in Perl 5.6.0
220
221=item Internal file glob
222
223Introduced in Perl 5.6.0
224
225=item fork() emulation
226
227Introduced in Perl 5.6.1
228
229See also L<perlfork>
230
231=item -Dusemultiplicity -Duseithreads
232
233Introduced in Perl 5.6.0
234
235Accepted in Perl 5.8.0
236
237=item Support for long doubles
238
239Introduced in Perl 5.6.0
240
241Accepted in Perl 5.8.1
242
243=item The C<\N> regex character class
244
245The C<\N> character class, not to be confused with the named character
246sequence C<\N{NAME}>, denotes any non-newline character in a regular
247expression.
248
249Introduced in Perl 5.12
250
251Exact version of acceptance unclear, but no later than Perl 5.18.
252
253=item C<(?{code})> and C<(??{ code })>
254
255Introduced in Perl 5.6.0
256
257Accepted in Perl 5.20.0
258
259See also L<perlre>
260
261=item Linux abstract Unix domain sockets
262
263Introduced in Perl 5.9.2
264
265Accepted before Perl 5.20.0.  The Socket library is now primarily maintained
266on CPAN, rather than in the perl core.
267
268See also L<Socket>
269
270=item Lvalue subroutines
271
272Introduced in Perl 5.6.0
273
274Accepted in Perl 5.20.0
275
276See also L<perlsub>
277
278=item Backtracking control verbs
279
280C<(*ACCEPT)>
281
282Introduced in Perl 5.10
283
284Accepted in Perl 5.20.0
285
286=item The C<:pop> IO pseudolayer
287
288See also L<perlrun/PERLIO>
289
290Accepted in Perl 5.20.0
291
292=item C<\s> in regexp matches vertical tab
293
294Accepted in Perl 5.22.0
295
296=item Postfix dereference syntax
297
298Introduced in Perl 5.20.0
299
300Accepted in Perl 5.24.0
301
302=item Lexical subroutines
303
304Introduced in Perl 5.18.0
305
306Accepted in Perl 5.26.0
307
308=item String- and number-specific bitwise operators
309
310Introduced in Perl 5.22.0
311
312Accepted in Perl 5.28.0
313
314=item Alphabetic assertions
315
316Introduced in Perl 5.28.0
317
318Accepted in Perl 5.32.0
319
320=item Script runs
321
322Introduced in Perl 5.28.0
323
324Accepted in Perl 5.32.0
325
326=item The infix C<isa> operator
327
328Introduced in Perl 5.32.0
329
330Accepted in Perl 5.36.0
331
332=item Subroutine signatures
333
334Introduced in Perl 5.20.0
335
336Accepted in Perl 5.36.0
337
338=item Regular Expression Set Operations
339
340Introduced in Perl 5.18
341
342Accepted in Perl 5.36
343
344See : L<perlrecharclass/Extended Bracketed Character Classes>
345
346=item try/catch control structure
347
348Introduced in Perl 5.34.0.
349
350Accepted in Perl 5.40 when not using the optional C<finally> block.
351
352=item The "const" attribute
353
354Introduced in Perl 5.22.0
355
356Accepted in Perl 5.40
357
358See also: L<perlsub/Constant Functions>
359
360=item for loop with multiple iteration variables
361
362Introduced in Perl 5.36.0.
363
364Accepted in Perl 5.40.
365
366This feature enables a parenthesized list of iteration variables for C<for>
367rather than a single variable.
368
369=back
370
371=head2 Removed features
372
373These features are no longer considered experimental and their functionality
374has disappeared. It's your own fault if you wrote production programs using
375these features after we explicitly told you not to (see L<perlpolicy>).
376
377=over 8
378
379=item 5.005-style threading
380
381Introduced in Perl 5.005
382
383Removed in Perl 5.10
384
385=item perlcc
386
387Introduced in Perl 5.005
388
389Moved from Perl 5.9.0 to CPAN
390
391=item The pseudo-hash data type
392
393Introduced in Perl 5.6.0
394
395Removed in Perl 5.9.0
396
397=item GetOpt::Long Options can now take multiple values at once (experimental)
398
399C<Getopt::Long> upgraded to version 2.35
400
401Removed in Perl 5.8.8
402
403=item Assertions
404
405The C<-A> command line switch
406
407Introduced in Perl 5.9.0
408
409Removed in Perl 5.9.5
410
411=item Test::Harness::Straps
412
413Moved from Perl 5.10.1 to CPAN
414
415=item C<legacy>
416
417The experimental C<legacy> pragma was swallowed by the C<feature> pragma.
418
419Introduced in Perl 5.11.2
420
421Removed in Perl 5.11.3
422
423=item Lexical C<$_>
424
425Using this feature triggered warnings in the category
426C<experimental::lexical_topic>.
427
428Introduced in Perl 5.10.0
429
430Removed in Perl 5.24.0
431
432=item Array and hash container functions accept references
433
434Using this feature triggered warnings in the category
435C<experimental::autoderef>.
436
437Superseded by L</Postfix dereference syntax>.
438
439Introduced in Perl 5.14.0
440
441Removed in Perl 5.24.0
442
443=item C<our> can have an experimental optional attribute C<unique>
444
445Introduced in Perl 5.8.0
446
447Deprecated in Perl 5.10.0
448
449Removed in Perl 5.28.0
450
451=item The C<:win32> IO pseudolayer
452
453Introduced in Perl 5.8.0 (or before)
454
455Removed in Perl 5.36.0
456
457=back
458
459=head1 SEE ALSO
460
461For a complete list of features check L<feature>.
462
463=head1 AUTHORS
464
465brian d foy C<< <brian.d.foy@gmail.com> >>
466
467SE<eacute>bastien Aperghis-Tramoni C<< <saper@cpan.org> >>
468
469=head1 COPYRIGHT
470
471Copyright 2010, brian d foy C<< <brian.d.foy@gmail.com> >>
472
473=head1 LICENSE
474
475You can use and redistribute this document under the same terms as Perl
476itself.
477
478=cut
479