Hello choroba,

I dont see or understand how this last example demonstrate that $\ cant be used this way. I see all special variables working in the very same way as expected: how many we have seen foreach $a... dont use $a pattern?

All special vars have the same behaviour:

use strict; use warnings; while (<DATA>){ my $var = (split)[0]; { my $eval = "for $var ('OK '){ print $var }"; local $@; eval $eval; print "$eval\n"; if ( $@ ){ print "\nEVAL ERROR: $@\n"; } } } # data (with some modifications) from https://www.perlmonks.org/?node_ +id=353259 __DATA__ $NOT_AVAILABLE # A NON EXISTING SPECIAL VARIABLE $_ The default or implicit variable. $a sort comparison routine variables. $b sort comparison routine variables. $1 Regexp parenthetical capture holders. $2 Regexp parenthetical capture holders. $31 # JUST TO EXAGERATE $& Last successful match (degrades performance). ${^MATCH} Similar to $& without performance penalty. Requires /p mo +difier. $` Prematch for last successful match string (degrades performance) +. ${^PREMATCH} Similar to $` without performance penalty. Requires /p + modifier. $' Postmatch for last successful match string (degrades performance +). ${^POSTMATCH} Similar to $' without performance penalty. Requires / +p modifier. $+ Last paren match. $^N Last closed paren match (last submatch). $^R Last regexp (?{code}) result. ${^RE_DEBUG_FLAGS} Current value of regexp debugging flags. See use + re 'debug'; ${^RE_TRIE_MAXBUF} Control memory allocations for RE optimizations +for large alternations. ${^ENCODING} The object reference to the Encode object, used to con +vert the source code to Unicode. ${^OPEN} Internal use: \0 separated Input / Output layer informatio +n. ${^UNICODE} Read-only Unicode settings. ${^UTF8CACHE} State of the internal UTF-8 offset caching code. ${^UTF8LOCALE} Indicates whether UTF8 locale was detected at startu +p. $. Current line number (or record number) of most recent filehandle +. $/ Input record separator. $| Output autoflush. 1=autoflush, 0=default. Applies to currently s +elected handle. $, Output field separator (lists) $\ Output record separator. $" Output list separator. (interpolated lists) $; Subscript separator. (Use a real multidimensional array instead. +) $% Page number for currently selected output channel. $= Current page length. $- Number of lines left on page. $~ Format name. $^ Name of top-of-page format. $: Format line break characters $^L Form feed (default "\f"). $^A Format Accumulator $? Child error. Status code of most recent system call or pipe. $! Operating System Error. (What just went 'bang'?) $^E Extended Operating System Error (Extra error explanation). ${^CHILD_ERROR_NATIVE} Native status returned by the last pipe clos +e, backtick (`` ) command, successful call to wait() or waitpid(), or + from the system() operator. $$ Process ID $< Real user id of process. $> Effective user id of process. $( Real group id of process. $) Effective group id of process. $0 Program name. $^O Operating System name. $] Old: Version and patch number of perl interpreter. Deprecated. $^C Current value of flag associated with -c switch. $^D Current value of debugging flags $^F Maximum system file descriptor. $^I Value of the -i (inplace edit) switch. $^M Emergency Memory pool. $^P Internal variable for debugging support. $^R Last regexp (?{code}) result. $^S Exceptions being caught. (eval) $^T Base time of program start. $^V Perl version. $^W Status of -w switch ${^WARNING_BITS} Current set of warning checks enabled by use warni +ngs; $^X Perl executable name. ${^GLOBAL_PHASE} Current phase of the Perl interpreter. $^H Internal use only: Hook into Lexical Scoping. ${^TAINT} Taint mode read-only flag. ${^WIN32_SLOPPY_STAT} If true on Windows stat() won't try to open t +he file.

My personal opinion is that this behaviour is correct and no errors nor warnings should be raised: such vars are always present and are somthing like super globals (is for such reason we localize $@ if needed) and if someone doesnt know about special vars and is so fool to use them this way is not a perl problem.

I like special variables and I will even add more to the list (to obtain switches passed to perl like -l )

L*

There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.

In reply to Re^5: foreach $1 -- all special variables by Discipulus
in thread foreach $1 by choroba

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.