in reply to Re: Get EXE VersionInfo
in thread Get EXE VersionInfo

Hi, what this problem? This function (unpack) is native on perl? javaserver:~/teste-rnt # ./exetime.pl T080720081328.exe Global symbol "$t" requires explicit package name at ./exetime.pl line 16. Execution of ./exetime.pl aborted due to compilation errors. javaserver:~/teste-rnt # perl --version This is perl, v5.8.8 built for x86_64-linux-thread-multi thanks

Replies are listed 'Best First'.
Re^3: Get EXE VersionInfo
by BrowserUk (Patriarch) on Aug 22, 2008 at 12:45 UTC

    It would be a lot easier to diagnose if you posted the relevant code.

    The error message means that you've attempted to use a variable $t but haven't declared it: my $t anywhere in your code. My guess is that you've made a change to the code above, and have typed $t instead of $ts somewhere, but that's pure speculation.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      print "$ARGV[0] : ", defined $ts ? ( scalar( localtime $ts) || "has unfathomable timestamp value $t +s" ) copy and past change de code to $t"+"s not $ts I find the problem, thanks. deadrop
      Thank you to help me, i find the first problem, variable $ts not declared, copy and past change the code to $t"+"s not $ts.
      
      But now, the program return only values to diferent version files. see:
      
      avaserver:~/teste-rnt # ./exetime.pl V190820081243.exe -> ( Version 1.0.11 )
      T190820081243.exe : Fri Jun 19 19:22:17 1992
      
      javaserver:~/teste-rnt # ./exetime.pl V300720081251.exe -> ( Version 1.0.12 )
      T300720081251.exe : Fri Jun 19 19:22:17 1992
      
      The code:
      
      #!/usr/bin/perl -slw
      use strict;
      
      open EXE, '<:raw', $ARGV[0] or die "$ARGV[0] : $!";
      my $dos = do{ local $/ = \65536; <EXE> };
      die "$ARGV[0] is not a .exe or .dll (sig='${ \substr $dos, 0, 2 }')"
          unless substr( $dos, 0, 2 ) eq 'MZ';
      
      my $coffoff = 8+ unpack 'x60 V', $dos;
      read( EXE, $dos, $coffoff - 65536 + 4, 65536 ) or die $! 
          if $coffoff > 65536;
      
      my $ts = unpack "x$coffoff V", $dos;
      
      print "$ARGV[0] : ", defined $ts
          ? ( scalar( localtime $ts) || "has unfathomable timestamp value $ts" )
          : 'has no timestamp';