Hello community,

here is the log from the commit of package perl-autodie for openSUSE:Factory 
checked in at 2014-03-09 18:33:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-autodie (Old)
 and      /work/SRC/openSUSE:Factory/.perl-autodie.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-autodie"

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-autodie/perl-autodie.changes        
2013-10-06 14:53:01.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.perl-autodie.new/perl-autodie.changes   
2014-03-09 18:33:48.000000000 +0100
@@ -1,0 +2,23 @@
+Fri Mar  7 06:53:34 UTC 2014 - [email protected]
+
+- updated to 2.23
+      * TEST / BUGFIX: Improved testing support on Android
+        and Blackberry devices. (GH #44, thanks to
+        Hugmeir.)
+
+      * TEST / INTERNAL / TRAVIS: Various non-code
+        tweaks to make travis-ci more happy with testing
+        autodie.
+
+      * BUGFIX: autodie no longer weakens strict by allowing
+        undeclared variables with the same name as built-ins.
+        (RT #74246, thanks to Neils Thykier and Father
+        Chrysostomos.)
+
+      * BUGFIX: `use autodie qw( foo ! foo);` now correctly
+        insists that we have hints for foo. (Thanks Niels Thykier)
+
+      * INTERNAL: Improved benchmarking code, thanks to
+        Niels Thykier.
+
+-------------------------------------------------------------------

Old:
----
  autodie-2.22.tar.gz

New:
----
  autodie-2.23.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-autodie.spec ++++++
--- /var/tmp/diff_new_pack.ovHxuK/_old  2014-03-09 18:33:49.000000000 +0100
+++ /var/tmp/diff_new_pack.ovHxuK/_new  2014-03-09 18:33:49.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-autodie
 #
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           perl-autodie
-Version:        2.22
+Version:        2.23
 Release:        0
 %define cpan_name autodie
 Summary:        Replace functions with ones that succeed or die with lexical 
scope
@@ -29,33 +29,6 @@
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  perl
 BuildRequires:  perl-macros
-#BuildRequires: perl(autodie)
-#BuildRequires: perl(autodie::exception)
-#BuildRequires: perl(autodie::exception::system)
-#BuildRequires: perl(autodie::hints)
-#BuildRequires: perl(autodie::skip)
-#BuildRequires: perl(autodie_skippy)
-#BuildRequires: perl(autodie::test::au)
-#BuildRequires: perl(autodie::test::au::exception)
-#BuildRequires: perl(autodie::test::badname)
-#BuildRequires: perl(autodie::test::missing)
-#BuildRequires: perl(autodie_test_module)
-#BuildRequires: perl(BSD::Resource)
-#BuildRequires: perl(Caller_helper)
-#BuildRequires: perl(Fatal_Leaky_Benchmark)
-#BuildRequires: perl(Hints_pod_examples)
-#BuildRequires: perl(Hints_provider_does)
-#BuildRequires: perl(Hints_provider_easy_does_it)
-#BuildRequires: perl(Hints_provider_isa)
-#BuildRequires: perl(Hints_test)
-#BuildRequires: perl(IPC::System::Simple)
-#BuildRequires: perl(lethal)
-#BuildRequires: perl(my::autodie)
-#BuildRequires: perl(pujHa'ghach)
-#BuildRequires: perl(Some::Module)
-#BuildRequires: perl(Sub::Identify)
-#BuildRequires: perl(Test::Kwalitee)
-#BuildRequires: perl(Test::Perl::Critic)
 Recommends:     perl(IPC::System::Simple) >= 0.12
 Recommends:     perl(Sub::Identify)
 %{perl_requires}
@@ -97,6 +70,6 @@
 
 %files -f %{name}.files
 %defattr(-,root,root,755)
-%doc AUTHORS benchmarks Changes LICENSE README
+%doc AUTHORS Changes LICENSE README
 
 %changelog

++++++ autodie-2.22.tar.gz -> autodie-2.23.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/Changes new/autodie-2.23/Changes
--- old/autodie-2.22/Changes    2013-09-21 04:37:23.000000000 +0200
+++ new/autodie-2.23/Changes    2014-01-27 03:51:03.000000000 +0100
@@ -1,5 +1,26 @@
 Revision history for autodie
 
+2.23      2014-01-27 13:50:55EST+1100 Australia/Melbourne
+
+        * TEST / BUGFIX: Improved testing support on Android
+          and Blackberry devices. (GH #44, thanks to
+          Hugmeir.)
+
+        * TEST / INTERNAL / TRAVIS: Various non-code
+          tweaks to make travis-ci more happy with testing
+          autodie.
+
+        * BUGFIX: autodie no longer weakens strict by allowing
+          undeclared variables with the same name as built-ins.
+          (RT #74246, thanks to Neils Thykier and Father
+          Chrysostomos.)
+
+        * BUGFIX: `use autodie qw( foo ! foo);` now correctly
+          insists that we have hints for foo. (Thanks Niels Thykier)
+
+        * INTERNAL: Improved benchmarking code, thanks to
+          Niels Thykier.
+
 2.22      2013-09-21 11:37:14 Asia/Tokyo
 
         * TEST / INTERNAL: Restore timestamps on touched testing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/LICENSE new/autodie-2.23/LICENSE
--- old/autodie-2.22/LICENSE    2013-09-21 04:37:23.000000000 +0200
+++ new/autodie-2.23/LICENSE    2014-01-27 03:51:03.000000000 +0100
@@ -1,4 +1,4 @@
-This software is copyright (c) 2013 by Paul Fenwick and others (see AUTHORS 
file).
+This software is copyright (c) 2014 by Paul Fenwick and others (see AUTHORS 
file).
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -12,7 +12,7 @@
 
 --- The GNU General Public License, Version 1, February 1989 ---
 
-This software is Copyright (c) 2013 by Paul Fenwick and others (see AUTHORS 
file).
+This software is Copyright (c) 2014 by Paul Fenwick and others (see AUTHORS 
file).
 
 This is free software, licensed under:
 
@@ -272,7 +272,7 @@
 
 --- The Artistic License 1.0 ---
 
-This software is Copyright (c) 2013 by Paul Fenwick and others (see AUTHORS 
file).
+This software is Copyright (c) 2014 by Paul Fenwick and others (see AUTHORS 
file).
 
 This is free software, licensed under:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/MANIFEST new/autodie-2.23/MANIFEST
--- old/autodie-2.22/MANIFEST   2013-09-21 04:37:23.000000000 +0200
+++ new/autodie-2.23/MANIFEST   2014-01-27 03:51:03.000000000 +0100
@@ -1,3 +1,4 @@
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest 
v5.012.
 AUTHORS
 Changes
 LICENSE
@@ -11,6 +12,7 @@
 benchmarks/benchmark.pl
 benchmarks/call.pl
 benchmarks/leak.pl
+benchmarks/raw-call.pl
 dist.ini
 lib/Fatal.pm
 lib/autodie.pm
@@ -20,6 +22,7 @@
 lib/autodie/skip.pm
 t/00-load.t
 t/Fatal.t
+t/args.t
 t/author-critic.t
 t/autodie.t
 t/autodie_skippy.pm
@@ -84,6 +87,7 @@
 t/release-pod-coverage.t
 t/release-pod-syntax.t
 t/repeat.t
+t/rt-74246.t
 t/scope_leak.t
 t/skip.t
 t/socket.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/META.json new/autodie-2.23/META.json
--- old/autodie-2.22/META.json  2013-09-21 04:37:23.000000000 +0200
+++ new/autodie-2.23/META.json  2014-01-27 03:51:03.000000000 +0100
@@ -4,7 +4,7 @@
       "Paul Fenwick <[email protected]>"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Dist::Zilla version 4.300034, CPAN::Meta::Converter 
version 2.120921",
+   "generated_by" : "Dist::Zilla version 5.012, CPAN::Meta::Converter version 
2.120921",
    "license" : [
       "perl_5"
    ],
@@ -35,7 +35,6 @@
          "requires" : {
             "B" : "0",
             "Carp" : "0",
-            "Config" : "0",
             "Exporter" : "0",
             "Fcntl" : "0",
             "POSIX" : "0",
@@ -53,6 +52,7 @@
       "test" : {
          "recommends" : {
             "BSD::Resource" : "0",
+            "Pod::Coverage::TrustPod" : "0",
             "Test::Kwalitee" : "0",
             "Test::Perl::Critic" : "0",
             "perl" : "5.010"
@@ -65,6 +65,7 @@
             "IO::Handle" : "0",
             "Socket" : "0",
             "Test::More" : "0",
+            "lib" : "0",
             "open" : "0"
          }
       }
@@ -80,6 +81,6 @@
          "web" : "https://github.com/pjf/autodie";
       }
    },
-   "version" : "2.22"
+   "version" : "2.23"
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/META.yml new/autodie-2.23/META.yml
--- old/autodie-2.22/META.yml   2013-09-21 04:37:23.000000000 +0200
+++ new/autodie-2.23/META.yml   2014-01-27 03:51:03.000000000 +0100
@@ -10,11 +10,12 @@
   IO::Handle: 0
   Socket: 0
   Test::More: 0
+  lib: 0
   open: 0
 configure_requires:
   ExtUtils::MakeMaker: 6.30
 dynamic_config: 0
-generated_by: 'Dist::Zilla version 4.300034, CPAN::Meta::Converter version 
2.120921'
+generated_by: 'Dist::Zilla version 5.012, CPAN::Meta::Converter version 
2.120921'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -27,7 +28,6 @@
 requires:
   B: 0
   Carp: 0
-  Config: 0
   Exporter: 0
   Fcntl: 0
   POSIX: 0
@@ -43,4 +43,4 @@
 resources:
   bugtracker: http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie
   repository: git://github.com/pjf/autodie
-version: 2.22
+version: 2.23
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/Makefile.PL new/autodie-2.23/Makefile.PL
--- old/autodie-2.22/Makefile.PL        2013-09-21 04:37:23.000000000 +0200
+++ new/autodie-2.23/Makefile.PL        2014-01-27 03:51:03.000000000 +0100
@@ -1,4 +1,5 @@
 
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker 
v5.012.
 use strict;
 use warnings;
 
@@ -22,7 +23,6 @@
   "PREREQ_PM" => {
     "B" => 0,
     "Carp" => 0,
-    "Config" => 0,
     "Exporter" => 0,
     "Fcntl" => 0,
     "POSIX" => 0,
@@ -43,39 +43,46 @@
     "IO::Handle" => 0,
     "Socket" => 0,
     "Test::More" => 0,
+    "lib" => 0,
     "open" => 0
   },
-  "VERSION" => "2.22",
+  "VERSION" => "2.23",
   "test" => {
     "TESTS" => "t/*.t"
   }
 );
 
 
-unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
-  my $tr = delete $WriteMakefileArgs{TEST_REQUIRES};
-  my $br = $WriteMakefileArgs{BUILD_REQUIRES};
-  for my $mod ( keys %$tr ) {
-    if ( exists $br->{$mod} ) {
-      $br->{$mod} = $tr->{$mod} if $tr->{$mod} > $br->{$mod};
-    }
-    else {
-      $br->{$mod} = $tr->{$mod};
-    }
-  }
-}
+my %FallbackPrereqs = (
+  "B" => 0,
+  "Carp" => 0,
+  "Exporter" => 0,
+  "Fcntl" => 0,
+  "File::Copy" => 0,
+  "File::Spec" => 0,
+  "File::Temp" => 0,
+  "FindBin" => 0,
+  "IO::Handle" => 0,
+  "POSIX" => 0,
+  "Scalar::Util" => 0,
+  "Socket" => 0,
+  "Test::More" => 0,
+  "Tie::RefHash" => 0,
+  "base" => 0,
+  "constant" => 0,
+  "if" => 0,
+  "lib" => 0,
+  "open" => 0,
+  "overload" => 0,
+  "strict" => 0,
+  "warnings" => 0
+);
 
-unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) {
-  my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};
-  my $pp = $WriteMakefileArgs{PREREQ_PM};
-  for my $mod ( keys %$br ) {
-    if ( exists $pp->{$mod} ) {
-      $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod};
-    }
-    else {
-      $pp->{$mod} = $br->{$mod};
-    }
-  }
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+  delete $WriteMakefileArgs{TEST_REQUIRES};
+  delete $WriteMakefileArgs{BUILD_REQUIRES};
+  $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
 }
 
 delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/benchmarks/Fatal_Leaky_Benchmark.pm 
new/autodie-2.23/benchmarks/Fatal_Leaky_Benchmark.pm
--- old/autodie-2.22/benchmarks/Fatal_Leaky_Benchmark.pm        2013-09-21 
04:37:23.000000000 +0200
+++ new/autodie-2.23/benchmarks/Fatal_Leaky_Benchmark.pm        2014-01-27 
03:51:03.000000000 +0100
@@ -5,14 +5,14 @@
 # And *don't* use a package.
 # Either of those will stop autodie leaking into this file.
 
-use constant N => 1000;
+use constant N => 1000000;
 
 # Essentially run a no-op many times. With a high leak overhead,
 # this is expensive. With a low leak overhead, this should be cheap.
 
 sub run {
     for (1..N) {
-        close(NOFILE);
+        binmode(STDOUT);
     }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/benchmarks/call.pl 
new/autodie-2.23/benchmarks/call.pl
--- old/autodie-2.22/benchmarks/call.pl 2013-09-21 04:37:23.000000000 +0200
+++ new/autodie-2.23/benchmarks/call.pl 2014-01-27 03:51:03.000000000 +0100
@@ -8,7 +8,9 @@
 
 # Run an autodie wrapped sub many times in what's essentially a no-op.
 # This should give us an idea of autodie's overhead.
-
-for (1..N) {
-    binmode(STDOUT);
+sub run {
+    for (1..N) {
+        binmode(STDOUT);
+    }
 }
+run();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/benchmarks/raw-call.pl 
new/autodie-2.23/benchmarks/raw-call.pl
--- old/autodie-2.22/benchmarks/raw-call.pl     1970-01-01 01:00:00.000000000 
+0100
+++ new/autodie-2.23/benchmarks/raw-call.pl     2014-01-27 03:51:03.000000000 
+0100
@@ -0,0 +1,17 @@
+#!/usr/bin/perl -w
+use 5.010;
+use strict;
+use warnings;
+
+use constant N => 1000000;
+
+# Essentially run a no-op many times - This is useful for comparison
+# with leak.pl or call.pl
+
+
+sub run {
+    for (1..N) {
+        binmode(STDOUT);
+    }
+}
+run();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/dist.ini new/autodie-2.23/dist.ini
--- old/autodie-2.22/dist.ini   2013-09-21 04:37:23.000000000 +0200
+++ new/autodie-2.23/dist.ini   2014-01-27 03:51:03.000000000 +0100
@@ -58,6 +58,9 @@
 Test::Kwalitee = 0
 Test::Perl::Critic = 0
 
+; release-pod-coverage.t likes this
+Pod::Coverage::TrustPod = 0;
+
 [Prereqs / RuntimeRecommends]
 perl = 5.010
 IPC::System::Simple = 0.12
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/lib/Fatal.pm 
new/autodie-2.23/lib/Fatal.pm
--- old/autodie-2.22/lib/Fatal.pm       2013-09-21 04:37:23.000000000 +0200
+++ new/autodie-2.23/lib/Fatal.pm       2014-01-27 03:51:03.000000000 +0100
@@ -48,7 +48,7 @@
 
 use constant MIN_IPC_SYS_SIMPLE_VER => 0.12;
 
-our $VERSION = '2.22'; # VERSION: Generated by DZP::OurPkg::Version
+our $VERSION = '2.23'; # VERSION: Generated by DZP::OurPkg::Version
 
 our $Debug ||= 0;
 
@@ -144,6 +144,7 @@
     ':2.20'  => [qw(:default)],
     ':2.21'  => [qw(:default)],
     ':2.22'  => [qw(:default)],
+    ':2.23'  => [qw(:default)],
 );
 
 # chmod was only introduced in 2.07
@@ -378,15 +379,16 @@
     # pass-through unknown tags (i.e. we have to manually handle
     # VOID_TAG).
     #
-    # TODO: Consider how to handle stuff like:
-    #   use autodie qw(:defaults ! :io);
-    #   use Fatal qw(:defaults :void :io);
+    # NB: _translate_import_args re-orders everything for us, so
+    # we don't have to worry about stuff like:
     #
-    # The ! and :void is currently not applied to anything in the
-    # example above since duplicates are filtered out.  This has been
-    # autodie's behaviour for quite a while, but it might make sense
-    # to change it so "!" or ":void" applies to stuff after they
-    # appear (even if they are all duplicates).
+    #     :default :void :io
+    #
+    # That will (correctly) translated into
+    #
+    #     expand(:defaults-without-io) :void :io
+    #
+    # by _translate_import_args.
     for my $func ($class->_translate_import_args(@fatalise_these)) {
 
         if ($func eq VOID_TAG) {
@@ -503,18 +505,26 @@
 
     # It does not hurt to do this in a predictable order, and might help 
debugging.
     foreach my $sub_name (sort keys %$subs_to_reinstate) {
-        my $sub_ref= $subs_to_reinstate->{$sub_name};
 
-        my $full_path = $pkg_sym.$sub_name;
-
-        # Copy symbols across to temp area.
+        # We will repeatedly mess with stuff that strict "refs" does
+        # not like.  So lets just disable it once for this entire
+        # scope.
+        no strict qw(refs);   ## no critic
 
-        no strict 'refs';   ## no critic
+        my $sub_ref= $subs_to_reinstate->{$sub_name};
 
-        local *__tmp = *{ $full_path };
+        my $full_path = $pkg_sym.$sub_name;
+        my $oldglob = *$full_path;
 
         # Nuke the old glob.
-        { no strict; delete $pkg_sym->{$sub_name}; }    ## no critic
+        delete $pkg_sym->{$sub_name};
+
+        # For some reason this local *alias = *$full_path triggers an
+        # "only used once" warning.  Not entirely sure why, but at
+        # least it is easy to silence.
+        no warnings qw(once);
+        local *alias = *$full_path;
+        use warnings qw(once);
 
         # Copy innocent bystanders back.  Note that we lose
         # formats; it seems that Perl versions up to 5.10.0
@@ -522,16 +532,12 @@
         # the scalar slot.  Thanks to Ben Morrow for spotting this.
 
         foreach my $slot (qw( SCALAR ARRAY HASH IO ) ) {
-            next unless defined *__tmp{ $slot };
-            *{ $full_path } = *__tmp{ $slot };
+            next unless defined *$oldglob{$slot};
+            *alias = *$oldglob{$slot};
         }
 
-        # Put back the old sub (if there was one).
-
         if ($sub_ref) {
-
-            no strict;  ## no critic
-            *{ $full_path } = $sub_ref;
+            *$full_path = $sub_ref;
         }
     }
 
@@ -597,31 +603,83 @@
 sub _translate_import_args {
     my ($class, @args) = @_;
     my @result;
-    for my $a (@args){
+    my %seen;
+
+    if (@args < 2) {
+        # Optimize for this case, as it is fairly common.  (e.g. use
+        # autodie; or use autodie qw(:all); both trigger this).
+        return unless @args;
+
+        # Not a (known) tag, pass through.
+        return @args unless exists($TAGS{$args[0]});
+
+        # Strip "CORE::" from all elements in the list as import and
+        # unimport does not handle the "CORE::" prefix too well.
+        #
+        # NB: we use substr as it is faster than s/^CORE::// and
+        # it does not change the elements.
+        return map { substr($_, 6) } @{ $class->_expand_tag($args[0]) };
+    }
+
+    # We want to translate
+    #
+    #     :default :void :io
+    #
+    # into (pseudo-ish):
+    #
+    #     expanded(:threads) :void expanded(:io)
+    #
+    # We accomplish this by "reverse, expand + filter, reverse".
+    for my $a (reverse(@args)) {
         if (exists $TAGS{$a}) {
             my $expanded = $class->_expand_tag($a);
-            # Strip "CORE::" from all elements in the list as import and
-            # unimport does not handle the "CORE::" prefix too well.
-            #
-            # NB: we use substr as it is faster than s/^CORE::// and
-            # it does not change the elements.
-            push @result, map { substr($_, 6) } @{$expanded};
+            push(@result,
+                 # Remove duplicates after ...
+                 grep { !$seen{$_}++ }
+                 # we have stripped CORE:: (see above)
+                 map { substr($_, 6) }
+                 # We take the elements in reverse order
+                 # (as @result be reversed later).
+                 reverse(@{$expanded}));
         } else {
-            #pass through
+            # pass through - no filtering here for tags.
+            #
+            # The reason for not filtering tags cases like:
+            #
+            #    ":default :void :io :void :threads"
+            #
+            # As we have reversed args, we see this as:
+            #
+            #    ":threads :void :io :void* :default*"
+            #
+            # (Entries marked with "*" will be filtered out completely).  When
+            # reversed again, this will be:
+            #
+            #    ":io :void :threads"
+            #
+            # But we would rather want it to be:
+            #
+            #    ":void :io :threads" or ":void :io :void :threads"
+            #
+
+            my $letter = substr($a, 0, 1);
+            if ($letter ne ':' && $a ne INSIST_TAG) {
+                next if $seen{$a}++;
+                if ($letter eq '!' and $seen{substr($a, 1)}++) {
+                    my $name = substr($a, 1);
+                    # People are being silly and doing:
+                    #
+                    #    use autodie qw(!a a);
+                    #
+                    # Enjoy this little O(n) clean up...
+                    @result = grep { $_ ne $name } @result;
+                }
+            }
             push @result, $a;
         }
     }
-    # If @args < 2, then we have no duplicates (because _expand_tag
-    # does not have duplicates and if it is not a tag, it is just a
-    # single value).  We optimize for this because it is a fairly
-    # common case (e.g. use autodie; or use autodie qw(:all); both
-    # trigger this).
-    return @result if @args < 2;
-
-    my %seen = ();
-    # Yes, this is basically List::MoreUtils's uniq/distinct, but
-    # List::MoreUtils is not in the Perl core and autodie is
-    return grep { !$seen{$_}++ } @result;
+    # Reverse the result to restore the input order
+    return reverse(@result);
 }
 
 
@@ -1849,6 +1907,6 @@
 L<IPC::System::Simple> for a similar idea for calls to C<system()>
 and backticks.
 
-=for Pod::Coverage exception_class fill_protos one_invocation throw 
write_invocation
+=for Pod::Coverage exception_class fill_protos one_invocation throw 
write_invocation ERROR_NO_IPC_SYS_SIMPLE LEXICAL_TAG
 
 =cut
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/lib/autodie/exception/system.pm 
new/autodie-2.23/lib/autodie/exception/system.pm
--- old/autodie-2.22/lib/autodie/exception/system.pm    2013-09-21 
04:37:23.000000000 +0200
+++ new/autodie-2.23/lib/autodie/exception/system.pm    2014-01-27 
03:51:03.000000000 +0100
@@ -5,7 +5,7 @@
 use base 'autodie::exception';
 use Carp qw(croak);
 
-our $VERSION = '2.22'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.23'; # VERSION: Generated by DZP::OurPkg:Version
 
 # ABSTRACT: Exceptions from autodying system().
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/lib/autodie/exception.pm 
new/autodie-2.23/lib/autodie/exception.pm
--- old/autodie-2.22/lib/autodie/exception.pm   2013-09-21 04:37:23.000000000 
+0200
+++ new/autodie-2.23/lib/autodie/exception.pm   2014-01-27 03:51:03.000000000 
+0100
@@ -4,7 +4,7 @@
 use warnings;
 use Carp qw(croak);
 
-our $VERSION = '2.22'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.23'; # VERSION: Generated by DZP::OurPkg:Version
 # ABSTRACT: Exceptions from autodying functions.
 
 our $DEBUG = 0;
@@ -404,6 +404,8 @@
     elsif ($mode eq '>')  { $wordy_mode = 'writing';   }
     elsif ($mode eq '>>') { $wordy_mode = 'appending'; }
 
+    $file = '<undef>' if not defined $file;
+
     return sprintf _FORMAT_OPEN, $file, $wordy_mode, $error if $wordy_mode;
 
     Carp::confess("Internal autodie::exception error: Don't know how to format 
mode '$mode'.");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/lib/autodie/hints.pm 
new/autodie-2.23/lib/autodie/hints.pm
--- old/autodie-2.22/lib/autodie/hints.pm       2013-09-21 04:37:23.000000000 
+0200
+++ new/autodie-2.23/lib/autodie/hints.pm       2014-01-27 03:51:03.000000000 
+0100
@@ -5,7 +5,7 @@
 
 use constant PERL58 => ( $] < 5.009 );
 
-our $VERSION = '2.22'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.23'; # VERSION: Generated by DZP::OurPkg:Version
 
 # ABSTRACT: Provide hints about user subroutines to autodie
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/lib/autodie/skip.pm 
new/autodie-2.23/lib/autodie/skip.pm
--- old/autodie-2.22/lib/autodie/skip.pm        2013-09-21 04:37:23.000000000 
+0200
+++ new/autodie-2.23/lib/autodie/skip.pm        2014-01-27 03:51:03.000000000 
+0100
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 
-our $VERSION = '2.22'; # VERSION
+our $VERSION = '2.23'; # VERSION
 
 # This package exists purely so people can inherit from it,
 # which isn't at all how roles are supposed to work, but it's
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/lib/autodie.pm 
new/autodie-2.23/lib/autodie.pm
--- old/autodie-2.22/lib/autodie.pm     2013-09-21 04:37:23.000000000 +0200
+++ new/autodie-2.23/lib/autodie.pm     2014-01-27 03:51:03.000000000 +0100
@@ -10,7 +10,7 @@
 # ABSTRACT: Replace functions with ones that succeed or die with lexical scope
 
 BEGIN {
-    our $VERSION = '2.22'; # VERSION: Generated by DZP::OurPkg::Version
+    our $VERSION = '2.23'; # VERSION: Generated by DZP::OurPkg::Version
 }
 
 use constant ERROR_WRONG_FATAL => q{
@@ -265,6 +265,10 @@
 
 =head1 FUNCTION SPECIFIC NOTES
 
+=head2 print
+
+The autodie pragma B<<does not check calls to C<print>>>.
+
 =head2 flock
 
 It is not considered an error for C<flock> to return false if it fails
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/t/Fatal.t new/autodie-2.23/t/Fatal.t
--- old/autodie-2.22/t/Fatal.t  2013-09-21 04:37:23.000000000 +0200
+++ new/autodie-2.23/t/Fatal.t  2014-01-27 03:51:03.000000000 +0100
@@ -5,7 +5,7 @@
 
 use Test::More tests => 17;
 
-use Fatal qw(open close :void opendir);
+use Fatal qw(:io :void opendir);
 
 eval { open FOO, "<".NO_SUCH_FILE };   # Two arg open
 like($@, qr/^Can't open/, q{Package Fatal::open});
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/t/args.t new/autodie-2.23/t/args.t
--- old/autodie-2.22/t/args.t   1970-01-01 01:00:00.000000000 +0100
+++ new/autodie-2.23/t/args.t   2014-01-27 03:51:03.000000000 +0100
@@ -0,0 +1,46 @@
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+
+use Test::More tests => 7;
+
+require Fatal;
+
+my @default = expand(':default');
+my @threads = expand(':threads');
+my @io = expand(':io');
+my %io_hash = map { $_ => 1 } @io;
+my @default_minus_io = grep { !exists($io_hash{$_}) } @default;
+
+is_deeply(translate('!a', 'a'), ['!a'], 'Keeps insist variant');
+
+is_deeply(translate(':default'), \@default,
+          'translate and expand agrees');
+
+is_deeply(translate(':default', ':void', ':io'),
+          [@default_minus_io, ':void', @io],
+          ':void position is respected');
+
+is_deeply(translate(':default', ':void', ':io', ':void', ':threads'),
+          [':void', @io, ':void', @threads],
+          ':void (twice) position are respected');
+
+is_deeply(translate(':default', '!', ':io'),
+    [@default_minus_io, '!', @io], '! position is respected');
+
+is_deeply(translate(':default', '!', ':io', '!', ':threads'),
+          ['!', @io, '!', @threads],
+          '! (twice) positions are respected');
+
+is_deeply(translate(':default', '!open', '!', ':io'),
+    [@default_minus_io, '!open', '!', grep { $_ ne 'open' } @io],
+          '!open ! :io works as well');
+
+sub expand {
+    # substr is to strip "CORE::" without modifying $_
+    return map { substr($_, 6) } @{Fatal->_expand_tag(@_)};
+}
+
+sub translate {
+    return [Fatal->_translate_import_args(@_)];
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/t/open.t new/autodie-2.23/t/open.t
--- old/autodie-2.22/t/open.t   2013-09-21 04:37:23.000000000 +0200
+++ new/autodie-2.23/t/open.t   2014-01-27 03:51:03.000000000 +0100
@@ -53,12 +53,18 @@
 # Sniff to see if we can run 'true' on this system.  Changes we can't
 # on non-Unix systems.
 
+use Config;
+my @true = ($^O =~ /android/
+            || ($Config{usecrosscompile} && $^O eq 'nto' ))
+        ? ('sh', '-c', 'true $@', '--')
+        : 'true';
+
 eval {
     use autodie;
 
     die "Windows and VMS do not support multi-arg pipe" if $^O eq "MSWin32" or 
$^O eq 'VMS';
 
-    open(my $fh, '-|', "true");
+    open(my $fh, '-|', @true);
 };
 
 SKIP: {
@@ -68,10 +74,10 @@
         use autodie;
 
         my $fh;
-        open $fh, "-|", "true";
-        open $fh, "-|", "true", "foo";
-        open $fh, "-|", "true", "foo", "bar";
-        open $fh, "-|", "true", "foo", "bar", "baz";
+        open $fh, "-|", @true;
+        open $fh, "-|", @true, "foo";
+        open $fh, "-|", @true, "foo", "bar";
+        open $fh, "-|", @true, "foo", "bar", "baz";
     };
 
     is $@, '', "multi arg piped open does not fail";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/t/release-pod-coverage.t 
new/autodie-2.23/t/release-pod-coverage.t
--- old/autodie-2.22/t/release-pod-coverage.t   2013-09-21 04:37:23.000000000 
+0200
+++ new/autodie-2.23/t/release-pod-coverage.t   2014-01-27 03:51:03.000000000 
+0100
@@ -7,6 +7,7 @@
   }
 }
 
+# This file was automatically generated by 
Dist::Zilla::Plugin::PodCoverageTests.
 
 use Test::More;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/t/release-pod-syntax.t 
new/autodie-2.23/t/release-pod-syntax.t
--- old/autodie-2.22/t/release-pod-syntax.t     2013-09-21 04:37:23.000000000 
+0200
+++ new/autodie-2.23/t/release-pod-syntax.t     2014-01-27 03:51:03.000000000 
+0100
@@ -7,6 +7,7 @@
   }
 }
 
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
 use Test::More;
 
 eval "use Test::Pod 1.41";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autodie-2.22/t/rt-74246.t 
new/autodie-2.23/t/rt-74246.t
--- old/autodie-2.22/t/rt-74246.t       1970-01-01 01:00:00.000000000 +0100
+++ new/autodie-2.23/t/rt-74246.t       2014-01-27 03:51:03.000000000 +0100
@@ -0,0 +1,14 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+use Test::More tests => 1;
+
+eval q{
+    use strict;
+    no warnings; # Suppress a "helpful" warning on STDERR
+    use autodie qw(open);
+    $open = 1;
+};
+like($@, qr/Global symbol "\$open" requires explicit package name/,
+     'autodie does not break "use strict;"');

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to