http://www.perlmonks.org?node_id=668537


in reply to Reference assessment techniques and how they fail

If anyone blesses a reference to package '0', he deserves what he gets. It's if (ref $r) { and if (blessed $r) { for me. Few people bother with writing for(my $i = $[; $i <= $#arr; $i++) and changing the index of the first element in an array is a more sane thing that blessing into a crazily named package into which you'd have problems adding methods.

Thanks for the node though, the rest was very interesting!

Replies are listed 'Best First'.
Re^2: Reference assessment techniques and how they fail ($[)
by lodin (Hermit) on Apr 07, 2008 at 12:22 UTC

    Few people bother with writing for(my $i = $[; $i <= $#arr; $i++)

    In Perl 5 $[ is a lexical compiler directive, so you don't have to worry about other users messing with your code through $[.

    lodin

      Note that, unlike other compile-time directives (such as strict), assignment to $[ can be seen from outer lexical scopes in the same file. However, you can use local() on it to strictly bound its value to a lexical block.
             from perldoc perlvar

      So I don't have to worry that someone will change mine $[ from within a different file that I used, but I still might run into problems if someone fiddles with $[ somewhere above my code in the same file.

      @a = (0,1,2,3,4,5); sub pr { print "sub \$a[2]=$a[2]\n"; } print "\$a[2]=$a[2]\n"; pr; { $[ = 1; print "\$a[2]=$a[2]\n"; pr; } print "\$a[2]=$a[2]\n"; pr;

      I refuse to worry anyway.