다른 배열로 2D 배열을 복사하려고합니다. 그러나 첫 번째 행이 내 기능에 의해 인쇄되지 않는 이상한 문제가 발생합니다. 그러나 첫 번째 행을 별도로 인쇄 할 때 값이 인쇄되기 때문에 값이 있습니다.Perl에서 2D 배열 복사
#!/usr/bin/perl
use UNIVERSAL 'isa';
#Function to print the contents of an array
sub printArray {
my ($vHash) = @_;
if (isa($vHash, 'ARRAY')) {
foreach my $el (@$vHash) {
print "A: $el\n";
printArray($el);
}
} else {
return;
}
return;
}
my @array = "";
my @line1 = (1, 2, 3);
my @line2 = (3, 4, 5);
my @line3 = (6, 7, 8);
#Creating a 2D array
@array = (\@line1, \@line2, \@line3);
my @array2 = "";
my $row_size = @array;
print "ROW SIZE: $row_size\n";
my $column_size = @{$array[0]};
print "COL Size: $column_size\n\n\n";
#Copying over the 2D array...element by element
for (my $i=0; $i<$row_size; ++$i) {
for (my $j=0; $j<$column_size; ++$j) {
$array2[$i][$j] = $array[$i][$j];
}
}
print "\n\nORIG ARRAY\n\n";
printArray(\@array);
print "\n\nCOPY ARRAY\n";
printArray(\@array2);
print "\n\n";
#Printing the first row separately
foreach my $ele (@{$array2[0]}) {
print "V: $ele\n";
}
이 프로그램의 출력 :
이 내 펄 코드
ROW SIZE: 3
COL Size: 3
ORIG ARRAY
A: ARRAY(0x65b110)
A: 1
A: 2
A: 3
A: ARRAY(0x65b170)
A: 3
A: 4
A: 5
A: ARRAY(0x65b1d0)
A: 6
A: 7
A: 8
COPY ARRAY
A: #WHY THIS IS MISSING
A: ARRAY(0x6d1f00)
A: 3
A: 4
A: 5
A: ARRAY(0x6d1f50)
A: 6
A: 7
A: 8
V: 1 #THESE VALUES ARE COMING FINE
V: 2
V: 3
내가 잘못 여기서 뭐하는 거지 무엇인지에 정말 혼란 스러워요! printArray 함수가 첫 번째 행을 인쇄하지 않는 이유는 무엇입니까? 어떤 도움을 주시면 감사하겠습니다. 감사합니다, 신참
이와 같은 UNIVERSAL :: isa의 사용은 권장되지 않습니다. Scalar :: Util 'reftype ''을 사용하고'if (ref $ vHash와 reftype $ vHash eq'ARRAY ') {...}' – Borodin