This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Porting/bench.pl: protect against data loss
authorJim Cromie <jim.cromie@gmail.com>
Sun, 10 Apr 2016 04:51:48 +0000 (22:51 -0600)
committerTony Cook <tony@develop-help.com>
Wed, 15 Jun 2016 00:35:52 +0000 (10:35 +1000)
Due to %data storage using $perl_name (rather than $label),
blead silently loses data when running like so:

   perl Porting/bench.pl -- perl perl

patch complains about above, but allows following:

   perl Porting/bench.pl -- perl=FOO perl=BAR

With this 1/2 fix, we can further probe the underlying key probs,
evident in the results from above

   ...
   loop::for::lex_range4
   empty for loop with lexical var and 4 integer range

         BAR    BAR
      ------ ------
   Ir 100.00 100.00
   Dr 100.00 100.00

Porting/bench.pl

index 3e93a71..c5fddde 100755 (executable)
@@ -482,9 +482,12 @@ sub select_a_perl {
 
 sub process_perls {
     my @results;
+    my %seen;
     for my $p (@_) {
         my ($perl, $label) = split /=/, $p, 2;
         $label //= $perl;
+        die "$label cannot be used on 2 different PUTs\n" if $seen{$label}++;
+
         my $r = qx($perl -e 'print qq(ok\n)' 2>&1);
         die "Error: unable to execute '$perl': $r" if $r ne "ok\n";
         push @results, [ $perl, $label ];