Mam blok perla, który powinien czytaćz pliku statycznego dla maski hosta IRC, poziomu uprawnień i komentarza. Pomiędzy Perlem (w którym jestem certyfikowanym nowicjuszem) a wyrażeniem regularnym mam problem z utworzeniem pliku.
sub read_users {
@users = ();
open CONFIG, "<", "users";
while (my $line = <CONFIG>)
{
next if $line =~ /^s*#/;
my ($mask, $level, $comment) = split /s+/, $line, 3;
push @users, [$mask, $level];
}
close CONFIG;
}
Plik obecnie odczytuje:
<CONFIG>
irc.hostmask.goes.here 500 comment
To nie działa. Rozumiem, gdzie wspomina słowo „użytkownicy”, a wyrażenie regularne pomija białe znaki. Narzekałem nad nim wystarczająco i próbowałem różnych sformułowań bez powodzenia. Jakieś pomysły?
Odpowiedzi:
3 dla odpowiedzi № 1Każda linia pliku musi być:
- komentarz (który jest ignorowany), składający się z opcjonalnej białej spacji,
#
i dowolny tekst - „maska”, „poziom” i „komentarz”, oddzielone białymi spacjami, bez wiodących białych spacji przed maską. Maska i poziom nie mogą zawierać spacji, choć komentarz może.
<CONFIG>
nie jest prawidłową linią; ekspresja my $line = <CONFIG>
odczytuje tylko jedną linię z CONFIG
uchwyt pliku i przechowuje go w $line
i while
powoduje, że powtarza się do <CONFIG>
zwraca wartość false (zwykle undef
na końcu pliku).