Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • JavaScript 1.7 has block scoped variables. I'm not sure what browsers besides FF 2 and newer support it though.

    <html>
    <head>
    <title>Block Scoped Variables</title>
    <script type="application/javascript;version=1.7">

    function methodName() {
        let (i = 7) {
            document.writeln('start: i is ' + i + '<br>');
            for( var j = 0; j < 10; j++ ) {
                let (i = j * 2) {
       

  • According to the first hit I got for "java block local variables" [sun.com], it looks like the variable declared in your "for" statement is actually outside the scope of that local block, but otherwise, the scope of a local variable inside a block is in fact inside the block and may temporarily obscure outer variables.

    Now in JavaScript, the rules are different, but I presume you're smart enough not to say "Java" when you mean "JavaScript".

    --
    • Randal L. Schwartz
    • Stonehenge
    • Considering he does Java programming most of the time now, I doubt he'd mistakenly call JavaScript Java.

      I haven't written any Java since about 1998 and I try not to read it too often as it usually makes my head hurt. ;)

      But if I'm reading this right, it looks like the for loop would need to be enclosed inside another block for it to work like J. David is expecting...

      void methodName() {
        int i = 7;
        {
          for (int j = 0; j < 10; j++) {
            int i = j * 2;
          }

    • Apparently my example has confused nearly everyone I've asked about this. Yes, I meant Java. The for loop actually has nothing to do with it. Let me say it in Perl, and drop the for:

      sub my_routine
      {
        my($i) = @_;
        {
          my $i = 18;  # different $i from the other one
        }
      }

      Of course, you can argue all day that declaring a variable in an inner block that shadows a variable in an outer block like this is a bad idea. It probably is. :) But the question for me is: did Java designe

      --
      J. David works really hard, has a passion for writing good software, and knows many of the world's best Perl programmers
  • Reusing a variable name in the same method is a TERRIBLE idea and is a beartrap waiting for some future maintenance programmer. Why would you want to do that?

    This sounds like a great opportunity for a Perl::Critic policy.