diff --git a/list_same/list_same b/list_same/list_same index e92af10..1400afe 100755 --- a/list_same/list_same +++ b/list_same/list_same @@ -40,6 +40,7 @@ sub cmdline { if ( scalar @dirs == 0 ) { push @dirs, "."; } +# map { print "$_\n"; } @dirs; } sub getdir { @@ -182,20 +183,38 @@ sub output_doubles(@) { sub output($) { my $string = shift; if ($opts{e}) { - $string =~ s/([ \&\;\`\'\\\"\|\*\?\~\<\>\^\(\)\[\]\{\}\$\010\013\020\011])/\\${1}/g; + $string = &escape($string); } print "$string"; } +sub escape($) { + my $string = shift; + $string =~ s/([ \&\;\`\'\\\"\|\*\?\~\<\>\^\(\)\[\]\{\}\$\010\013\020\011])/\\${1}/g; + return $string; +} + +sub unescape($) { + my $string = shift; + $string =~ s/\\([ \&\;\`\'\\\"\|\*\?\~\<\>\^\(\)\[\]\{\}\$\010\013\020\011])/${1}/g; + return $string; +} + sub dirsort { - my $firstdir = $dirs[0]; - if ( $a =~ /^$firstdir\/[^\/]*$/ && $b =~ /^$firstdir\/[^\/]*$/ ) { + my $firstdir = &escape($dirs[0]); + my $debuglevel = 0; + print "$a $b\n" if $debuglevel == 1; + if ( $a =~ /^$firstdir\/[^\/]*$/o && $b =~ /^$firstdir\/[^\/]*$/o ) { + print "A $a $b\n" if $debuglevel == 1; return &wardsort; - } elsif ( ( $a =~ /^$firstdir\/[^\/]*$/ ) && ! ( $b =~ /^$firstdir\/[^\/]*$/ ) ) { + } elsif ( ( $a =~ /^$firstdir\/[^\/]*$/o ) && ! ( $b =~ /^$firstdir\/[^\/]*$/o ) ) { + print "B $a $b\n" if $debuglevel == 1; return -1; - } elsif ( ! ( $a =~ /^$firstdir\/[^\/]*$/ ) && ( $b =~ /^$firstdir\/[^\/]*$/ ) ) { + } elsif ( ! ( $a =~ /^$firstdir\/[^\/]*$/o ) && ( $b =~ /^$firstdir\/[^\/]*$/o ) ) { + print "C $a $b\n" if $debuglevel == 1; return 1; } else { + print "D $a $b\n" if $debuglevel == 1; return &wardsort; } }