Inizialmente, sto lavorando con una lista con lunghezza = 2^16. Tuttavia, per astrarre questo, imposterò length = 5 in questo esempio.Come ottenere un elenco per mostrare gli zeri per le voci vuote in Perl?
#subroutine to make undefined entries -> 0
sub zeros {
foreach(@_) {
if(!defined($_)) {
$_ = 0;
}
}
}
#print out and indicies and elements of list
sub checking {
print "List = \n";
my $counter = 0;
foreach (@_) {
print "index = $counter\n";
print "$_\n";
$counter += 1;
}
print "\n";
}
Metodo 1: Se accedo indici diversi per modificare l'elemento, ricevo il seguente quando stampo le matrici. Non voglio vedere in bianco. Voglio che siano 0. Ho già impostato una subroutine "zeri" per fare diventare zero le voci non definite. Ma non so cosa sia andato storto nel mio codice. Ho anche provato "$ _ + = 0" per ogni elemento della lista. Ancora non riuscivo a ottenere zeri per le voci vuote.
#method 1
@abc =();
$abc[1] = 3;
$abc[5] = 5;
&zeros(@abc);
&checking(@abc);
List =
index = 0
index = 1
3
index = 2
index = 3
index = 4
index = 5
5
E Metodo 2: posso ottenere zeri se inizializzare l'elenco come questo. Ma come ho detto, sto lavorando con una lista molto lunga, non posso assolutamente inizializzare la mia lista come questa.
#method 2
@abc = (3,0,0,0,5);
&checking(@abc);
List =
index = 0
3
index = 1
0
index = 2
0
index = 3
0
index = 4
5
È possibile inizializzare l'elenco utilizzando '@abc = (0) x 2 ** 16' che lo imposta su un elenco di 2 ** 16 zeri? –
Si dovrebbe sempre usare 'use strict; usare avvertenze; '. Renderà la tua vita molto più facile. – TLP