Forum Webscript.Ru
Программирование => Perl => Тема начата: koliama от 12 Ноября 2004, 17:17:47
-
ДОброго дня всем.
Задача такая - надо получить uid владельца каталогов, которые в свою очередь лежат в определенном каталоге.
Вот мой код
#!/usr/bin/perl -wT
use strict;
use File::stat;
my $dir = "/usr/home/";
opendir(HOME, $dir);
while(my $catalog = readdir HOME)
{
my $sb = stat($catalog);
printf "File is %s, uid %d\\n", $catalog, $sb->uid;
}
closedir(HOME);
exit;
вот что мне на этот код выдает система
File is ., uid 0
File is .., uid 0
stat() on unopened filehandle File::stat::nik at /usr/local/lib/perl5/5.6.1/File/stat.pm line 49.
Can\'t call method "uid" on an undefined value at ./fstat.pl line 12.
Подскажите плиз, в чем проблема?
-
koliama
убери точки из прочитанного каталога.
while(my $catalog = readdir HOME)
{
next if ($catalog =! /^\\.+$/);
-
NeoNox
добавил в свой код эту строку.
#!/usr/bin/perl -wT
use strict;
use File::stat;
my $dir = "/usr/home/";
opendir(HOME, $dir);
while(my $catalog = readdir HOME)
{
next if ($catalog =! /^\\.+$/);
my $sb = stat($catalog);
printf "File is %s, uid %d\\n", $catalog, $sb->uid;
}
closedir(HOME);
exit;
выдал следующие ошибки
Use of uninitialized value in pattern match (m//) at ./fstat.pl line 10.
Use of uninitialized value in pattern match (m//) at ./fstat.pl line 10.
Use of uninitialized value in pattern match (m//) at ./fstat.pl line 10.
Use of uninitialized value in pattern match (m//) at ./fstat.pl line 10.
Use of uninitialized value in pattern match (m//) at ./fstat.pl line 10.
Use of uninitialized value in pattern match (m//) at ./fstat.pl line 10.
Use of uninitialized value in pattern match (m//) at ./fstat.pl line 10.
Use of uninitialized value in pattern match (m//) at ./fstat.pl line 10.
не могу понять, что ему не нравится..
-
очепятался
while(my $catalog = readdir HOME)
{
next if ($catalog =~ /^\\.+$/);
my $sb = stat($dir.$catalog);
printf "File is %s, uid %d\\n", $catalog, $sb->uid;
}
closedir(HOME);
exit;
обрати внимание на my $sb = stat($dir.$catalog); #полный путь к каталогу
-
Упс, опередили
use strict;
use File::stat;
my $dir = "c:/usr/bin/";
opendir(HOME, $dir);
while( my $catalog = readdir(HOME) ) {
next if $catalog =~ /^\\.?\\.$/;
my $sb = stat($dir.$catalog) or die "No $catalog: $!";
printf "File is %s, uid %d\\n", $catalog, $sb->uid;
}
closedir(HOME);
exit;
-
NeoNox
да - с таким регекспом работает :)
пасибо большое