Приветствую всех.
Написал такой скрипт: (может гдето коряво, не судите строго, только учусь)#!/usr/bin/perl
$in_passwd = "/etc/passwd";
$in_alias = "/etc/mail/test_alias.txt";open (PASSWD,"$in_passwd") or die "Can't open passwd file. $!.";
open (ALIAS,"$in_alias") or die "Can't open passwd file. $!.";while (defined($alias=<ALIAS>)) {
chomp ($alias);
while (defined($passwd=<PASSWD>)) {
($user,$d,$d,$d,$comment,$d,$d) = split(/:/,$passwd);
chomp ($user);
$comment =~ tr/жюгсоьазвуйнрыэехпидлтчфмбцъБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС/ФЧЦЯНЭЮГБСИМПШЩЕУОХДКРВТЛАЖЗабвгдежзийклмнопрстуфхцчшщъыьэюя/;
if ($alias eq $user) {
print "$comment\n";
last;
}
}
}close (ALIAS);
close (PASSWD);скрипт сравнивает файлы passwd test_alias.txt на наличие одинаковых учетных записей.
Проблема вот в чем: когда происходит вызод из внутреннего циска по last, то при в ходе в него проверка начинается не с первой строки файла passwd
а со следующей от той, с которой был осуществлен выход, а надо что бы с первой. Как это сделать не подскажите ?Заранее спасибо всем.
>скрипт сравнивает файлы passwd test_alias.txt на наличие одинаковых учетных записей.
>Проблема вот в чем: когда происходит вызод из внутреннего циска по last,извиняюсь за ошибки
"выход из внутреннего цикла"
Проще будет если вначале "/etc/mail/test_alias.txt" считать в хеш, а потом проверять defined($Alias{$user})
А чего ты хотел ? Спорим, у тебя то же самое будет и в любом другом языке ? :)
Либо закрывай файл и открывай снова, либо (что несомненно лучше) делай seek в начало :)
>А чего ты хотел ? Спорим, у тебя то же самое будет
>и в любом другом языке ? :)
>Либо закрывай файл и открывай снова, либо (что несомненно лучше) делай seek
>в начало :)т.е. закрывать passwd сразу после last и открывать перед внутренним циклом ?
а что такое seek ?
>а что такое seek ?нашел. и вот что получилось в итоге:
#!/usr/bin/perl
$in_passwd = "/etc/passwd";
$in_alias = "/etc/mail/test_alias.txt";open (PASSWD,"$in_passwd") or die "Can't open passwd file. $!.";
open (ALIAS,"$in_alias") or die "Can't open passwd file. $!.";while (defined($alias=<ALIAS>)) {
chomp ($alias);
# open (PASSWD,"$in_passwd") or die "Can't open passwd file. $!.";
while (defined($passwd=<PASSWD>)) {
($user,$d,$d,$d,$comment,$d,$d) = split(/:/,$passwd);
chomp ($user);
$comment =~ tr/жюгсоьазвуйнрыэехпидлтчфмбцъБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС/ФЧЦЯНЭЮГБСИМПШЩЕУОХДКРВТЛАЖЗабвгдежзийклмнопрстуфхцчшщъыьэюя/;
if ($alias eq $user) {
print "$comment\n";
# close (PASSWD);
seek (PASSWD,0,0);
last;
}
}
}close (ALIAS);
close (PASSWD);вроде работает как надо. Однако может что то неверно ?
>вроде работает как надо. Однако может что то неверно ?
имхо алгоритм
>>вроде работает как надо. Однако может что то неверно ?
>имхо алгоритма как правильно сделать ?
Parish тебе уже сказал:Проще будет если вначале "/etc/mail/test_alias.txt" считать в хеш, а потом проверять defined($Alias{$user})
:)
>Parish тебе уже сказал:
>
>Проще будет если вначале "/etc/mail/test_alias.txt" считать в хеш, а потом проверять defined($Alias{$user})
>
>
>
>:)
ясно. буду пробовать сделать как положено
спасибо всем большое за помощь :))