Witam.
Jak w temacie, muszę zapisać zawartość folderu /var/mail do tablicy asocjacyjnej.
Niestety uczę się dopiero perla i to mnie trochę przerosło bo w kursach opisane jest tylko wczytywanie z pliku. ;/
Witam.
Jak w temacie, muszę zapisać zawartość folderu /var/mail do tablicy asocjacyjnej.
Niestety uczę się dopiero perla i to mnie trochę przerosło bo w kursach opisane jest tylko wczytywanie z pliku. ;/
Najprościej chyba będzie użyć składni co da wszystkie nieukryte pliki z katalogu mail. Zobacz http://perldoc.perl.org/functions/glob.html
#!/usr/bin/perl
open(UCHWYT,’/var/mail’) or die “Nie można otworzyć pliku: $!”;
%linie = ; # czytanie do tablicy
close (UCHWYT);
print %linie; # drukowanie tablicy
Taki mam kod ale jak zrobie tak jak proponujesz open(UCHWYT,’/var/mail/*’) to wyskakuje błąd, że nie ma takiego katalogu… ;/
Nie proponuję czegoś co napisałeś. Kliknąłeś chociaż w link, który podałem? Jeśli chcesz dostać nazwy plików z katalogu /var/mail/ to dostaniesz je za pomocą operatora <> (a jest to po prostu inny sposób wywołania funkcji glob)
my @files = /mail/*>;
my @linie = /mail/*>;
close (linie);
print @linie; # drukowanie tablicy
Zrobiłem coś takiego i faktycznie zadziałało.
Wielkie dzięki.
A po co i czemu ma służyć
close (linie);
Nie otwierasz jawnie żadnego uchwytu pliku, nie ma więc potrzeby wywoływać close. Polecam też używać “use strict;” i “use warnings”, tak na przyszłość.
Dzięki za rady niestety piszę w perlu od tygodnia i nie wiem nawet jak tego (use strict;" i "use warnings) użyć.
Mam jeszcze pytanie, jak teraz tą tablicę przetworzyć żeby wyświetlało same nazwy? (tu mam wycinek z wydruku):
/var/mail/wiolusiak/var/mail/wisla/var/mail/wislak/var/mail/witol/var/mail/wizard6/var/mail/wizzard/var/mail/wkrolik/var/mail/wodnik
Wiem, że trzeba użyć wyrażenia regularnego. Tylko jak i w krórym miejscu?
Same nazwy plików, bez /var/mail? No to wystarczy użyć substr do wydobycia podciągu znaków, wyrażenia regularne w tym przypadku to przesada.
;/ niestety muszę zastosować w.regularne.
Ale sprawdzę też ten sposób.
Dzięki za cierpliwość i wyrozumiałość.
– Dodane 11.06.2011 (So) 22:20 –
#!/usr/bin/perl
my @linie = /mail/*>;
print @linie; # drukowanie tablicy
my @l =substr @linie, 10;
print @linie;
napisałem takie coś ale nie działa, nie widzę niestety błędu, który popełniam
substr działa na napisach. A Ty masz tablicę napisów. Operację musisz wykonywać na elemencie tablicy, a nie na niej samej. Przy okazji użycie use strict i use warnings, więcej o nich w perldoc.
#!/usr/bin/perl
use strict;
use warnings;
my @linie = /mail/*>;
my @l = map { substr $_, 10 } @linie;
print $_, "\n" for @l;
no faktycznie dużo łatwiej niż przez wyrażenie reg. ale czy teraz da się jakoś sprawdzic czy są zalogowani np przez komendę who lub w ? i wypisac osoby zalogowanej osoby mail ?