In this article I will explain how I extract pragmatically the enumerations differences between Powerbuilder releases using EmbeddingPerl library and the differents pbperlxxx interpreters.
Just run each version of pbperlxxx interpreter from command line :
pbperl100 -MPowerbuilder::EnumClasses -e "print join $/, sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;" > enums100.txt
pbperl105 -MPowerbuilder::EnumClasses -e "print join $/, sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;" > enums105.txt
pbperl110 -MPowerbuilder::EnumClasses -e "print join $/, sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;" > enums110.txt
pbperl115 -MPowerbuilder::EnumClasses -e "print join $/, sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;" > enums115.txt
pbperl120 -MPowerbuilder::EnumClasses -e "print join $/, sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;" > enums120.txt
pbperl125 -MPowerbuilder::EnumClasses -e "print join $/, sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;" > enums125.txt
Then I compare the results files using a diff tool to extract differences…
So I wrote a Perl script that does it for me :
my @versions = qw( 100 105 110 115 120 125);
sub compare{
my ($a, $b) = @_;
print "Between $a and $b:\n";
my $code = '-MPowerbuilder=":all" -MPowerbuilder::EnumClasses -e "print join $/, sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;"';
`pbperl${a} $code > tmp${a}.txt`;
`pbperl${b} $code > tmp${b}.txt`;
print join $/, map{s/^[<]/-/; s/^[>]/+/;$_} grep {/^[<>]/ && !/^[<>] CLASS/} split /\n/, `diff tmp${a}.txt tmp${b}.txt`;
unlink "tmp${a}.txt";
unlink "tmp${b}.txt";
print "\n\n";
return 0; #don't mind
}
$a = shift @versions;
while($b = shift @versions){
compare( $a, $b );
$a = $b;
}
And the ouput was :
Between 100 and 105: + argcallingconvention + datetimeformat + menustyle + toolbarstyle + webpagingmethod Between 105 and 110: + dbnotification + orientationtype + syncprocesstype + windowanimationstyle Between 110 and 115: + richtexttoolbaractivation + sqlfunction Between 115 and 120: + flowdirection Between 120 and 125: