| IPC-Run3 documentation | Contained in the IPC-Run3 distribution. |
IPC::Run3::ProfLogReader - read and process a ProfLogger file
use IPC::Run3::ProfLogReader; my $reader = IPC::Run3::ProfLogReader->new; ## use "run3.out" my $reader = IPC::Run3::ProfLogReader->new( Source => $fn ); my $profiler = IPC::Run3::ProfPP; ## For example my $reader = IPC::Run3::ProfLogReader->new( ..., Handler => $p ); $reader->read; $eaderr->read_all;
Reads a log file. Use the filename "-" to read from STDIN.
IPC::Run3::ProfLogReader->new( ... )$reader->set_handler( $handler )$reader->get_handler()$reader->read()$reader->read_all()This method reads until there is nothing left to read, and then returns true.
Copyright 2003, R. Barrie Slaymaker, Jr., All Rights Reserved
You may use this module under the terms of the BSD, Artistic, or GPL licenses, any version.
Barrie Slaymaker <barries@slaysys.com>
| IPC-Run3 documentation | Contained in the IPC-Run3 distribution. |
package IPC::Run3::ProfLogReader; $VERSION = 0.044;
use strict;
sub new { my $class = ref $_[0] ? ref shift : shift; my $self = bless { @_ }, $class; $self->{Source} = "run3.out" unless defined $self->{Source} && length $self->{Source}; my $source = $self->{Source}; if ( ref $source eq "GLOB" || UNIVERSAL::isa( $source, "IO::Handle" ) ) { $self->{FH} = $source; } elsif ( $source eq "-" ) { $self->{FH} = \*STDIN; } else { open PROFILE, "<$self->{Source}" or die "$!: $self->{Source}\n"; $self->{FH} = *PROFILE{IO}; } return $self; }
sub set_handler { $_[0]->{Handler} = $_[1] }
sub get_handler { $_[0]->{Handler} }
sub read { my $self = shift; my $fh = $self->{FH}; my @ln = split / /, <$fh>; return 0 unless @ln; return 1 unless $self->{Handler}; chomp $ln[-1]; ## Ignore blank and comment lines. return 1 if @ln == 1 && ! length $ln[0] || 0 == index $ln[0], "#"; if ( $ln[0] eq "\\app_call" ) { shift @ln; my @times = split /,/, pop @ln; $self->{Handler}->app_call( [ map { s/\\\\/\\/g; s/\\_/ /g; $_; } @ln ], @times ); } elsif ( $ln[0] eq "\\app_exit" ) { shift @ln; $self->{Handler}->app_exit( pop @ln, @ln ); } else { my @times = split /,/, pop @ln; $self->{Handler}->run_exit( [ map { s/\\\\/\\/g; s/\\_/ /g; $_; } @ln ], @times ); } return 1; }
sub read_all { my $self = shift; 1 while $self->read; return 1; }
1;