다음 서브 루틴 OutputingReorderedVectors가 있습니다. 미리 지정된 요구 사항에 따라 벡터를 출력하는 것이 목표입니다. 그러나 코드는 빈 파일 만 출력합니다.해시 구조의 키로 배열 작성
나는 문제가 다시 주문 chainRollupDoc의 두 번째 수준의 해시에서 키를 포함이 다음 코드 세그먼트에서 온해야한다고 생각
my @rollupArray = sort keys %chainRollupDoc;
my @reorderedSS =();
foreach my $i(0 .. $#rollupArray)
{
foreach my $cui (sort keys %{$chainRollupDoc->{$rollupArray[$i]}})
{
push @reorderedSS, $cui;
}
}
전체 서브 루틴은 다음과
#####################################
sub OutputingReorderedVectors
#####################################
{
my $centroids = shift;
my $fileName = shift;
my $chainRollupDoc = shift;
my @rollupArray = sort keys %chainRollupDoc;
my @reorderedSS =();
foreach my $i(0 .. $#rollupArray)
{
foreach my $cui (sort keys %{$chainRollupDoc->{$rollupArray[$i]}})
{
push @reorderedSS, $cui;
}
}
my %attributes =();
foreach my $category (keys %$centroids)
{
foreach my $cui (keys %{$centroids->{$category}})
{
$features{$cui} = 1;
}
}
my @fullSpace = sort keys %attributes;
open(OUTPUT, "> $fileName");
foreach my $i(0 .. $#reorderedSS)
{
printf OUTPUT "\t%s", $reorderedSS[$i];
}
print OUTPUT "\n";
foreach my $i (0 .. $#fullSpace)
{
printf OUTPUT "%s", $fullSpace[$i];
foreach my $j (0 .. $#reorderedSS)
{
printf OUTPUT "\t%f", $centroids->{$reorderedSS[$j]}->{$fullSpace[$i]};
}
print OUTPUT "\n";
}
close OUTPUT;
}
에
'use strict;'와'use warnings;'을 사용합니까? 필자는 Perl에서 약 20 년 동안 만 프로그래밍을 해왔으며, 나는 그들이하는 모든 문제점을 발견하지 못한다는 것을 알고 있으므로 필자는 본질적으로 Perl을 사용하지 않고 Perl을 코딩하지 않는다. –
인덱스를 사용하는 대신 배열 요소를 직접 사용하십시오. 예 : for my $ i (0 .. $ # array)'my $ elem (@array)'을 사용하십시오. – TLP
['use strict'] (http://perldoc.perl.org/strict.html) 및 왜 그렇게하는 것이 좋은지 알 때까지 ['경고를 사용하십시오 '] (http://perldoc.perl.org/warnings.html). –