in reply to How can one bypass use strict?

^CMDLINE is a regular (constant) string, use strict refs; would complain only if that string was in a variable:

my $s= '^CMDLINE'; ${$s} = join ' ', $0, @ARGV

As it is the ${} is used to give a non_standard name to the variable, but that's OK.

It is the same as using $var= "use strict "; print "${var}101"; to print use strict 101.

Update: I apologize, I should stop trying to answer fast and start tinking a little... this is actually quite weird as $^CMDLINE is of course not declared, so strict should complain about it. It looks like if you use a caret then an upper case string (something like ${^T}) then strict let you get away with it. As soon as you don't use the caret or start with a lower case... you die: ${^Ta} is OK but not ${^aT}

Replies are listed 'Best First'.
Re: Re: How can one bypass use strict?
by Hofmator (Curate) on Aug 13, 2001 at 23:26 UTC

    But why complains ${CMDLINE} = 'foo'; then??

    And why does ${^cmdline} = 'foo'; give a syntax error?? There must be some kind of special rules for variables starting with /^\^[A-Z]/,

    -- Hofmator

      Because the form ${^X} must have an uppercase charater there. This comes from toke.c:
      /* In variables name $^X, these are the legal values for X. * 1999-02-27 mjd-perl-patch@plover.com */ #define isCONTROLVAR(x) (isUPPER(x) || strchr("[\\]^_?",(x)))
      And the ${^Xyzpdq} variables are an extension of those, so claims perlvar:
      It understands `^X' (caret `X') to mean the control-`X' character. For example, the notation `$^W' (dollar-sign caret `W') is the scalar variable whose name is the single character control-`W'. This is better than typing a literal control-`W' into your program.

      Finally, new in Perl 5.6, Perl variable names may be alphanumeric strings that begin with control characters (or better yet, a caret). These variables must be written in the form `${^Foo}'; the braces are not optional. `${^Foo}' denotes the scalar variable whose name is a control-`F' followed by two `o''s. ...