P005 SLUŽBY POČÍTAČOVÝCH SÍTÍ
Obsah
|
Pole, hashe
Spočítáme slova ve vstupním souboru
while ($line = <>) {
@a = split /\W+/, $line;
$total += @a;
}
print "Slov celkem: $total\n";
Kolik je kterých slovwhile (<>) {
for $word (split /\W+/) {
$counts{$word}++ if $word;
}
}
for (sort keys %counts) {
print "$_: $counts{$_}\n";
}
Můžeme změnit způsob tříděnífor (sort {$counts{$b} <=> $counts{$a}}
keys %counts) {
printf "%5d: %s\n", $counts{$_}, $_;
}
Vyhledání duplicit v /etc/passwd
#!/usr/bin/perl
open FILE, "/etc/passwd" or die;
while (<FILE>) {
chomp;
($login, $pw, $uid, $gid, $name, $home, $sh)
= split /:/;
if (defined $passwd{$login}) {
print "$passwd{$login} x ",
"$login: $name, uid $uid, shell $sh";
}
else {
$passwd{$login} = "$name, uid $uid, shell $sh";
}
}
close FILE;
Zápis do rouryopen MAIL, "| mail $user"
print MAIL "Vážený uživateli $user, ...";
close MAIL;
Čtení z rouryopen PASSWD, "ypcat |"
Proměnné prostředí jsou uložené v hashi %ENVfor (sort keys %ENV) {
print "$_=$ENV{$_}\n";
}
Změnou hodnoty zde změníme hodnotu prostředí$ENV{PATH} = "/bin:/usr/bin";
Použití pro whereis
(@ARGV) || die "Usage: whereis substr";
$string = shift;
@path = ();
@path = split /:/, $ENV{PATH} if defined $ENV{PATH};
push @path, split /:/, $ENV{MANPATH}
if defined $ENV{MANPATH};
if (! @path) {
die "No PATH or MANPATH found\n";
}
for $dir (@path) {
next unless -d $dir;
for (<$dir/$string* $dir/*/$string*>) {
print "$_\n";
}
}
Jan Pazdziora adelton@informatics.muni.cz