История изменений
Исправление vtVitus, (текущая версия) :
#!/usr/bin/perl
use strict;
use warnings;
my $start_level = 1;
my $src = $ARGV[0];
print "$ARGV[0]\n";
my @arr = sort_ ($ARGV[0], $start_level);
sub sort_ {
my ($src, $level) = @_;
opendir (my $dh, $src) || return;
my @sort_dir = grep {!/^\.{1,2}$/} map $_->[0], sort {$a->[1] <=> $b->[1] || $a->[0]cmp $b->[0] } map [ $_, -f "$src/$_"], readdir ($dh); #здесь убираются файлы . и .. и происходит сортировка
closedir ($dh);
for (my $i=0; $i < @sort_dir; $i++) {
my $elem = $sort_dir[$i];
my $last = $i eq (@sort_dir -1);
my $head = $level eq $start_level;
if ( -d "$src/$elem" or $head) {
my $headSymbol = ($last and $head) ? "└" : "├";
my $space = "──";
printf "%s%s %s\n", $headSymbol, $space x $level, $elem;
} else {
my $headSymbol = "│";
my $space = " ";
my $space2 = $last ? "└" : "├";
printf "%s%s %s── %s\n", $headSymbol, $space x ($level-1), $space2, $elem;
}
sort_ ("$src/$elem", $level+1) if ( -d "$src/$elem" );
}
}
Исправление vtVitus, :
#!/usr/bin/perl
use strict;
use warnings;
my $start_level = 1;
my $src = $ARGV[0];
print "$ARGV[0]\n";
my @arr = sort_ ($ARGV[0], $start_level);
sub sort_ {
my ($src, $level) = @_;
opendir (my $dh, $src);
my @sort_dir = grep {!/^\.{1,2}$/} map $_->[0], sort {$a->[1] <=> $b->[1] || $a->[0]cmp $b->[0] } map [ $_, -f "$src/$_"], readdir ($dh); #здесь убираются файлы . и .. и происходит сортировка
closedir ($dh);
for (my $i=0; $i < @sort_dir; $i++) {
my $elem = $sort_dir[$i];
my $last = $i eq (@sort_dir -1);
my $head = $level eq $start_level;
if ( -d "$src/$elem" or $head) {
my $headSymbol = ($last and $head) ? "└" : "├";
my $space = "──";
printf "%s%s %s\n", $headSymbol, $space x $level, $elem;
} else {
my $headSymbol = "│";
my $space = " ";
my $space2 = $last ? "└" : "├";
printf "%s%s %s── %s\n", $headSymbol, $space x ($level-1), $space2, $elem;
}
sort_ ("$src/$elem", $level+1) if ( -d "$src/$elem" );
}
}
Исходная версия vtVitus, :
#!/usr/bin/perl
use strict;
use warnings;
my $start_level = 1;
my $src = $ARGV[0];
print "$ARGV[0]\n";
my @arr = sort_ ($ARGV[0], $start_level);
sub sort_ {
my ($src, $level) = @_;
opendir (my $dh, $src);
my @sort_dir = grep {!/^\.{1,2}$/} map $_->[0], sort {$a->[1] <=> $b->[1] || $a->[0]cmp $b->[0] } map [ $_, -f "$src/$_"], readdir ($dh); #здесь убираются файлы . и .. и происходит сортировка
closedir ($dh);
for (my $i=0; $i < @sort_dir; $i++) {
my $elem=$sort_dir[$i];
my $last = $i eq (@sort_dir -1);
my $head = $level eq $start_level;
if ( -d "$src/$elem" or $head) {
my $headSymbol = ($last and $head) ? "└" : "├";
my $space = "──";
printf "%s%s %s\n", $headSymbol, $space x $level, $elem;
} else {
my $headSymbol = ($last and $head) ? "└" : "│";
my $space = " ";
my $space2 = $last ? "└" : "├";
printf "%s%s %s── %s\n", $headSymbol, $space x ($level-1), $space2, $elem;
}
sort_ ("$src/$elem", $level+1) if ( -d "$src/$elem" );
}
}