Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: foreach $1

by kcott (Archbishop)
on Jun 06, 2020 at 17:50 UTC ( [id://11117767]=note: print w/replies, xml ) Need Help??


in reply to Re: foreach $1
in thread foreach $1

G'day Rolf,

"Can anyone guess of a special var other than $_ where aliasing might make sense?"

I made a quick scan through perlvar and nothing leapt out at me as being appropriate for this.

"Otherwise shouldn't we make a feature request to throw a compilation error? (At least under strict or warnings?)"

I'm not sold on making it a fatal error but I do think a warning may be appropriate. I had a look at "warnings: Category Hierarchy" but didn't think any existing category was really suitable: maybe create a new top-level category or a new sub-category of "syntax".

— Ken

Replies are listed 'Best First'.
Re^3: foreach $1
by LanX (Saint) on Jun 06, 2020 at 21:52 UTC
    Well I'm not sure yet.

    I've tested with $a and the loop var didn't interfere with the sort block.

    Probably we need to decide case by case...

    Though my gut feeling says all non alphabetic symbols should cause a warning when used as a loop alias.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

      Yes, $a and $b seem to be OK. $" also seems to work, but $\ doesn't:
      for $\ (qw( a b c d )) { print "@{[1, 2, 3]}"; } # Output: # 1 2 31 2 31 2 31 2 3
      map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
        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.
        > $" also seems to work, but $\ doesn't:

        ehm ... that's surprising

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11117767]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (5)
As of 2024-04-23 22:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found