use strict; use warnings; use constant HEADER => q[ Untitled Document ]; use constant FOOTER => q[

File Name,             

Author,     

Date (MM/DD/Year),   

TIME (H:M:S),      

Version No.,       

Number,

Feature Name,

Paragraph Number,

Requirement Number

]; sub fixupRecord { my $record = shift; for (qw(FileName Author Date Time Version Number FeatureName ParagraphNumber RequirementNumber)) { $record->{$_} = '&npsp;' unless defined $record->{$_} } } sub formatRecord { my $record = shift; fixupRecord( $record ); qq[

@{[$record->{FileName}]}

@{[$record->{Author}]},

@{[$record->{Date}]}

@{[$record->{Time}]}

@{[$record->{Version}]},

@{[$record->{Number}]},

@{[$record->{FeatureName}]}

@{[$record->{ParagraphNumber}]},

@{[$record->{RequirementNumber}]}

]; } print HEADER; for my $filename (@ARGV) { my $file = do { local (@ARGV, $/) = $filename; <> }; my %record; for ([ Author => qr/^Author\s+:\s+(.+)/m ], [ Number => qr/^Number\s+:\s+(.+)/m ], [ Version => qr/^Version Number\s+:\s+(.+)/m ], [ FeatureName => qr/^Feature\s+:\s(.+)/m ], [ FileName => qr/^File Name\s+:\s(.+)/m ], [ Date => qr/^Modification Date\s+:\s(.+)/m ]) { @record{$_->[0]} = $file =~ $_->[1]; $record{$_->[0]} =~ s/^\s+//; $record{$_->[0]} =~ s/\s+$//; } $file =~ s/^.+?Paragraph Number\s+Requirement Number\s+Last Modified\n//s; for (split /\n/, $file) { my %instance = %record; @instance{qw(ParagraphNumber RequirementNumber)} = split; print formatRecord( \%instance ); } } print FOOTER; #### __SIG__ printf "You are here %08x\n", unpack "L!", unpack "P4", pack "L!", B::svref_2object(sub{})->OUTSIDE;