У меня возникают проблемы со следующим блоком кода: Где $ output is netstat -lnt | grep "::: 60". В частности, раздел под комментарием #Create filename format
Perl: строка foreach, split, изменить строку, установить в массив. Opendir, next if files = измененная строка. Отключить файлы
my @lines = split /^/, $output;
foreach my $line (@lines) {
my ($garb, $long_ports) = (split /\s*:::\s*/, $line);
#Get the last 2 digits of the 60XX port number
my ($garb2, $ports) = (split /60/, $long_ports);
#Split values to numbers 0-9 for correct filename format
if ($ports < 10) {
my ($garb3, $ports2) = (split /0/, $ports);
#Add 0 since 0 port is split to empty string
if (length($ports2) == 0){
$ports2 = "0$ports2";
}
#Create file name format
my @locked_ports = ".X$ports2-lock";
}
}
my %h = map {$_ => 1 } @locked_ports;
#open /tmp and find the .X*-lock files that DO NOT match locked_ports
opendir (DIR, $tmp) or die "Error in opening dir $tmp\n";
while (my $files = readdir(DIR)) {
if (exists $h{$files}){
next}
unlink $files;
}
closedir(DIR);
Я также попытался:
#Create file name format
my @locked_ports = ".X$ports2-lock";
}
}
#open /tmp and find the .X*-lock files that DO NOT match locked_ports
opendir (DIR, $tmp) or die "Error in opening dir $tmp\n";
while (my $files = readdir(DIR)) {
next if $files =~ @locked_ports;
unlink $files;
}
closedir(DIR);
И:
#Create file name format
my $locked_ports = ".X$ports2-lock";
}
}
#open /tmp and find the .X*-lock files that DO NOT match locked_ports
opendir (DIR, $tmp) or die "Error in opening dir $tmp\n";
while (my $files = readdir(DIR)) {
next if $files =~ $locked_ports;
unlink $files;
}
closedir(DIR);
Каждый раз, когда я получаю сообщение об ошибке следующего вида: Global symbol "@locked_ports" requires explicit package name
, Global symbol "$locked_ports" requires explicit package name
Как я могу ve "next" над именами файлов, которые равны линиям locked_ports?
Любая помощь очень ценится.
Спасибо.
Правильное углубление облегчит чтение. но даже в этом случае я бы посоветовал вам начинать с нуля. чтобы получить помощь здесь, я бы порекомендовал вам выровнять код и просто показать вход и объяснить простым текстом, что вы хотите с ним делать. – beasy
Хэш-код, который у вас был, но с момента его удаления больше смысла '... = ~ @ foo' не годится. – ikegami
Также обратите внимание, что вы пытаетесь отключить '.' и' ..' и другие каталоги. – ikegami