For some hints see http://www.le-berre.com/perl/perldoc.htm#Hacks and Help understanding Win32::Eventlog

And see this, seems to work :) its a start, definitely an improvement over raw Win32::EventLog but it does need some flushing out

#!/usr/bin/perl -- use strict; use warnings; use Data::Dumper; Main( @ARGV ); exit( 0 ); sub Main { my $e = MyEventLog->new("Application"); print DD( { $e->First } ); my $rec = $e->Last ; print DD( $rec ); print DD( { $rec->Prev } ); } sub DD { Data::Dumper->new([@_])->Useqq(1)->Dump; } BEGIN { package MyEventLog::Entry; use Scalar::Util qw' weaken '; $INC{'MyEventLog/Entry.pm'} = __FILE__; sub new { my( $class, $parent, $self ) = @_; $self->{MyEventLog} = $parent; weaken $self->{MyEventLog} ; return bless $self, $class; } sub Prev { # sub Previous { my( $self ) = @_; return $self->{MyEventLog}->Get( $self->{RecordNumber} - 1 ); } sub Next { # sub Nextious { my( $self ) = @_; return $self->{MyEventLog}->Get( $self->{RecordNumber} + 1 ); } package MyEventLog; use Win32::EventLog; $INC{'MyEventLog.pm'} = __FILE__; sub new { my( $package, $eventLog , $computerName ) = @_; $computerName ||= $ENV{ComputerName}; my $handle=Win32::EventLog->new($eventLog, $computerName) or die "Can't open Application EventLog\n"; my $recs; $handle->GetNumber($recs) or die "Can't get number of EventLog records\n"; my $base; $handle->GetOldest($base) or die "Can't get number of oldest EventLog record\n"; return bless { handle => $handle, recs => $recs, base => $base, GetMessageText => !!1, }, $package; } sub Add { die "todo , # update recs" } sub First { return shift->GetNth( 0 ); } sub Last { return shift->GetNth( -1 ); } sub GetNth { my( $self, $ix ) = @_; if( $ix < 0 ){ $ix += 1 + $self->{recs}; } else { $ix += $self->{base}; } return $self->Get( $ix ); } sub Get { my( $self, $ix ) = @_; local $Win32::EventLog::GetMessageText = $self->{GetMessageTex +t}; my $hashRef = {}; $self->{handle}->Read( Win32::EventLog::EVENTLOG_FORWARDS_READ() | Win32::EventLog::EVENTLOG_SEEK_READ() , $ix, $hashRef ) or die "Can't read EventLog entry #$ix\n"; return %$hashRef if wantarray; return MyEventLog::Entry->new( $self => $hashRef ); } 1; } __END__

Don't ask me to explain anything, instead read Modern Perl: the free book


In reply to Re: Win32::EventLog not returning all events? by Anonymous Monk
in thread Win32::EventLog not returning all events? by syphon

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.