Привет! Помогите сильно начинающему, будьте добры. Задача - в названии темы. Т.е я задаю скрипту путь - он мне выплевывет содержимое рекурсивно в виде дерева. На данный момент имеется такое:
#!/usr/bin/perl
use strict;
use warnings;
my $start_level = 0;
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);
foreach my $elem (@sort_dir) {
if ( -d "$src/$elem" ) {
printf "%s|- %-10s\n", '| ' x $level, $elem;
sort_ ("$src/$elem", ++$level); # если элемент - папка, вызываем рекурсию по новой, добавляем счетчик уровней вложености
$level = $level -1; # и сразу убавляем, для следующих элементов
} else {
printf "%s|- %-10s\n", '| ' x $level, $elem;
}
}
}
/boot/
|- efi
| |- EFI
| | |- redhat
| | | |- grub.efi
|- grub
| |- device.map
| |- e2fs_stage1_5
| |- fat_stage1_5
| |- ffs_stage1_5
| |- grub.conf
| |- iso9660_stage1_5
| |- jfs_stage1_5
| |- menu.lst
| |- minix_stage1_5
| |- reiserfs_stage1_5
| |- splash.xpm.gz
| |- stage1
| |- stage2
| |- ufs2_stage1_5
| |- vstafs_stage1_5
| |- xfs_stage1_5
|- lost+found
|- .vmlinuz-2.6.32-431.el6.x86_64.hmac
|- System.map-2.6.32-431.el6.x86_64
|- config-2.6.32-431.el6.x86_64
|- initramfs-2.6.32-431.el6.x86_64.img
|- symvers-2.6.32-431.el6.x86_64.gz
|- vmlinuz-2.6.32-431.el6.x86_64
|- efi
| |- EFI
| |- redhat
| |- grub.efi
Заранее спасибо!