Эта версия жемчуга ожидает вход на stdin или от имен (имен) файлов, указанных на командной строке, и печатает результаты к stdout.
Это использует хеш для отслеживания то, сколько раз это видело те же значения вместе (игнорирующий последующие строки, если они не в обратном порядке сначала). Дважды означает, что отношения между столбцом A и столбцом B двунаправлены <-> B, в то время как однажды средства, однонаправленные от A-> B.
Хеши по сути не заказаны, таким образом, мы можем использовать следующий массив для сохранения порядка входных строк, и распечатать результаты в подобном порядке (не будет точно то же, потому что мы только печатаем AB, даже если BA был также замечен),
Если порядок вывода не важен, то прокомментируйте или удалите my @order
строка и push
строка и подкачка символ комментария на двух версиях foreach
строки ниже.
#! /usr/bin/perl
use strict;
# hash keys will be 'columnA-columnB', we'll split them when we print the report.
my %AB=();
my @order=();
while(<>) {
chomp;
my ($A, $B) = split;
# have we seen a key B-A? if so, increment that rather than define A-B
if (defined($AB{$B . '-' . $A})) {
$AB{$B . '-' . $A} = 2;
} elsif (! defined($AB{$A . '-' . $B})) {
$AB{$A . '-' . $B} = 1;
push @order, $A . '-' . $B;
}
}
#foreach my $key (sort keys %AB) {
foreach my $key (@order) {
my ($A,$B) = split /-/,$key;
if ($AB{$key} == 1) {
print "$A -> $B\n";
} elsif ($AB{$key} == 2) {
print "$A <-> $B\n";
} ;
}
Вывод:
Mike <-> John Pamela <-> Barbara Mike -> Paul Roger -> Paul
Во-первых, я проверил бы, почему у Вас есть "ошибка: не мог создать временный файл: Никакой такой файл или каталог" при первой попытке. Каков был начальный $TMPDIR? Действительно ли это отличалось от/tmp или/var/tmp? Вы могли проверить полномочия на эти два каталога? Вы рассмотрели добавление "-v" к командам мерзавца, для наблюдения деталей? Если действительно требуется использовать другой TMPDIR, рассмотрите добавление этой переменной в некоторый другой "точечный файл", как .profile.
Я также получил эту ошибку:error: unable to create temporary file: Not a directory.
при добавлении файла.(git add filename.ext
)
Я проверил папку .git
и обнаружил подозрительный файл e4
(, возможно, поврежденный ). e4
должен быть каталогом, но это не так. Итак, я удалил файл (с именем e4 в моем случае )из.git/objects/
rm -rf.git/objects/e4
После этого ошибка больше не повторялась.