Первый кусок:
my %names;
while (<>) {
( my $col1 ) = split / /, $_;
$names{$col1} = 1;
last if eof;
}
names
. <>
имеет особое значение в perl - это либо STDIN
, либо содержимое файлов, указанных в командной строке. Похоже, что этот код работает только в последнем случае, что, в общем-то, плохо. $_
устанавливается на текущую строку. $_
разбивается
на пробельные символы, что превращает его в массив. my ( $col1 )
является массивом - первый элемент после разбиения присваивается $col1
. (Остальные можно присвоить с помощью my ( $col1, $col2, @more_cols ) = ...
)$col1
в хэше names
установлен в 1. Например:
$VAR1 = {
'c73p1avrsrldo150top' => 1,
'c73p1avrfusevrmtop' => 1,
'slic73p1hsicbxttop' => 1
};
Затем приступаем ко второму файлу:
while (<>) {
print if /^(\S+).*/ && not $names{$1};
}
Начинается с плохого регулярного выражения, которое "просто" захватывает первое слово в строке (в $1). И если $names{$1}
не установлен, выведет строку.
Что, учитывая ваши входные данные, просто не будет работать - потому что вы проверяете, присутствует ли Comp
в names
, а его не будет.
Вы можете добавить следующее в gpg -agent.conf (в вашем домашнем каталоге):
--log-file <filename>