Remove 'use UNIVERSAL;', switch to UNIVERSAL::isa()
[p5sagit/p5-mst-13.2.git] / lib / File / Compare.pm
index e76c10f..2f9c45c 100644 (file)
@@ -5,9 +5,8 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $Too_Big *FROM *TO);
 
 require Exporter;
 use Carp;
-use UNIVERSAL qw(isa);
 
-$VERSION = '1.1';
+$VERSION = '1.1001';
 @ISA = qw(Exporter);
 @EXPORT = qw(compare);
 @EXPORT_OK = qw(cmp);
@@ -27,14 +26,15 @@ sub compare {
     my $to = shift;
     my $closefrom=0;
     my $closeto=0;
-    my ($size, $status, $fr, $tr, $fbuf, $tbuf);
+    my ($size, $fromsize, $status, $fr, $tr, $fbuf, $tbuf);
     local(*FROM, *TO);
     local($\) = '';
 
     croak("from undefined") unless (defined $from);
     croak("to undefined") unless (defined $to);
 
-    if (ref($from) && (isa($from,'GLOB') || isa($from,'IO::Handle'))) {
+    if (ref($from) && 
+        (UNIVERSAL::isa($from,'GLOB') || UNIVERSAL::isa($from,'IO::Handle'))) {
        *FROM = *$from;
     } elsif (ref(\$from) eq 'GLOB') {
        *FROM = $from;
@@ -42,9 +42,11 @@ sub compare {
        open(FROM,"<$from") or goto fail_open1;
        binmode FROM;
        $closefrom = 1;
+       $fromsize = -s FROM;
     }
 
-    if (ref($to) && (isa($to,'GLOB') || isa($to,'IO::Handle'))) {
+    if (ref($to) &&
+        (UNIVERSAL::isa($to,'GLOB') || UNIVERSAL::isa($to,'IO::Handle'))) {
        *TO = *$to;
     } elsif (ref(\$to) eq 'GLOB') {
        *TO = $to;
@@ -54,11 +56,16 @@ sub compare {
        $closeto = 1;
     }
 
+    if ($closefrom && $closeto) {
+       # If both are opened files we know they differ if their size differ
+       goto fail_inner if $fromsize != -s TO;
+    }
+
     if (@_) {
        $size = shift(@_) + 0;
        croak("Bad buffer size for compare: $size\n") unless ($size > 0);
     } else {
-       $size = -s FROM;
+       $size = $fromsize;
        $size = 1024 if ($size < 512);
        $size = $Too_Big if ($size > $Too_Big);
     }