in reply to Re^2: Code Loop?
in thread Code Loop?

You could poison them with a tie to catch uses at runtime:

package Tie::Poison; sub TIESCALAR { ... } sub TIEARRAY { ... } sub FETCH { my $var = tied $_[0]; die "Prohibited variable '$$var' used"; } package unusual_variable_names; our @unusual = qw( @@ @$ ... ); sub unimport { for my $name (@unusual) { no strict 'refs'; tie @{ $name }, 'Tie::Poison', $name; }; }; ... package main; no unusual_variable_names;

Replies are listed 'Best First'.
Re^4: Code Loop?
by LanX (Saint) on Aug 08, 2018 at 14:42 UTC
    yep but as you said it's only runtime.

    But it should be feasible to write a an op-code walker catching them at compile time in the UNITCHECK phase.

    D:\>perl -MO=Terse -E "use strict; say @@" LISTOP (0x2820630) leave [1] OP (0x2820600) enter COP (0x2820670) nextstate LISTOP (0x2820700) say OP (0x28206d0) pushmark UNOP (0x2820740) rv2av [2] <-- array PADOP (0x2820778) gv GV (0x1dede0) *@ <-- of glob *@ -e syntax OK D:\>perl -MO=Concise -E "use strict; say @@" 7 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 48 -e:1) v:%,*,&,{,x*,x&,x$,$,469764096 ->3 6 <@> say vK ->7 3 <0> pushmark s ->4 5 <1> rv2av[t2] lK/3 ->6 <-- array 4 <#> gv[*@] s ->5 <-- of glob *@ -e syntax OK

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice