Ogni volta che eseguo il loop su un hash con le sue chiavi e quindi stampo ciascun valore, viene visualizzato un avviso "uso di valore non inizializzato in concatenazione (.) O stringa ...". Anche se l'hash è chiaramente inizializzato in anticipo. L'output che desidero viene stampato, ma mi piacerebbe comunque sapere perché questo si traduce in un avvertimento, soprattutto perché l'accesso a un valore direttamente (al di fuori di un ciclo) funziona senza avvisi.Perl - Perché il loop su un hash con le sue chiavi e quindi la stampa di ogni valore risulta in un avviso non inizializzato?
#!/usr/bin/perl
use warnings;
use strict;
my %fruit =();
%fruit = ('Apple' => 'Green', 'Strawberry' => 'Red', 'Mango' => 'Yellow');
#works
print "An apple is $fruit{Apple} \n";
#gives warnings
foreach my $key (%fruit)
{
print "The color of $key is $fruit{$key} \n";
}
#also gives warnings
foreach my $key (%fruit)
{
my $value = $fruit{$key};
print "$value \n";
}
Prendere in considerazione il codice precedente. Immagino che perl veda una differenza tra la prima stampa e la seconda stampa. Ma perché? Perché c'è una differenza tra il recupero del valore di un hash al di fuori del ciclo e il recupero del valore di un has all'interno di un ciclo?
Grazie!
Grazie! Questo in effetti ha funzionato. Non ho realizzato :-). – Gx1sptDTDa