in reply to Recover a variable from a loop

Declare them. If you don't know what the implications are of an error message you can always use diagnostics:

$ perl -Mstrict -Mdiagnostics -e '$x=1;' Global symbol "$x" requires explicit package name at -e line 1. Execution of -e aborted due to compilation errors (#1) (F) You've said "use strict" or "use strict vars", which indicates + that all variables must either be lexically scoped (using "my" or +"state"), declared beforehand using "our", or explicitly qualified to say which package the global variable is in (using "::"). Uncaught exception from user code: Global symbol "$x" requires explicit package name at -e line 1 +. Execution of -e aborted due to compilation errors.

Replies are listed 'Best First'.
Re^2: Recover a variable from a loop
by Chaoui05 (Scribe) on May 26, 2016 at 09:01 UTC
    Thanks for the tool. I thought about that but i already declare my variable in my loop. I just want to recover them in this code part
    unless ($white{browser_name => $browser[0]}->compare($blue{browser_na +me => $browser[1]})) { $diff_file = $white->difference($blue); print '#The images differ; see ' . $diff_file . ' for details'. "\ +n"; my $open_cmd; if ($^O eq 'darwin') { $open_cmd = 'open' } elsif ($^O eq 'MSWin32') { $open_cmd = ''; } else { $open_cmd = 'display'; } `$open_cmd $diff_file`; }
    Lost in translation
      but i already declare my variable in my loop

      No, you don't. You have not declared $diff_file in any part of the code which you have shown.

        For this variable yes. I've just done it. But for $white, it's done .
        Lost in translation
      unless ($white{browser_name => $browser[0]}->compare($blue{browser_name => $browser[1]})) {
         $diff_file = $white->difference($blue);
         print '#The images differ; see ' . $diff_file . ' for details'. "\n";
         ...
         }

      I don't understand what you're trying to do with an expression like $white{browser_name => $browser[0]}, but I doubt it's the right way to go.

      You're trying to use the old fashioned (pre-Perl 5) multidimensional array hack | emulation on the hash  %white which you have never declared. (Update: You're not accessing the  $white object reference.)

      c:\@Work\Perl\monks>perl -wMstrict -le "use Data::Dump qw(dd); ;; my %white; ;; my @bar = qw(bozzle); ;; $white{ foo => $bar[0] } = 'wibble'; dd \%white; " { "foo\34bozzle" => "wibble" }
      The  "foo\34bozzle" key in the dd dump is part of this old hack. See  $; in perlvar for some info on this. I'd like to give you a more complete reference, but I can't seem to find one ATM. (Anyone...?) (Update: Ok, there's this brief discussion on-line in perldata: Multi-dimensional array emulation.)


      Give a man a fish:  <%-{-{-{-<